Create your own contenteditable directive that overrides the basic one. Here is how I have seen it done. The basic idea is that you set the ng-model attribute to be bound to the elements inner html. Then anytime the editable content changes, the html is updated and a digest cycle is fired. It utilizes the Angular ngModel controller.
HTML
<div contenteditable="true" ng-model="list.phone"></div>
Directive
.directive('contenteditable', function() {
return {
require: 'ngModel',
link: function(scope, element, attrs, ngModel) {
element.bind('blur change', function() {
scope.$apply(function() {
ngModel.$setViewValue(element.html());
});
});
ngModel.$render = function() {
element.html(ngModel.$viewValue);
};
}
}
});