Contenteditable with ng-model doesn't work

后端 未结 3 1805
轻奢々
轻奢々 2020-12-03 05:22

I\'m trying to store the value of a contenteditable to my JS code. But I can\'t find out why ng-model doesn\'t work in this case.

&         


        
3条回答
  •  余生分开走
    2020-12-03 06:06

    contenteditable tag will not work directly with angular's ng-model because the way contenteditable rerender the dom element on every change.

    You have to wrap it with a custom directive for that:

    JS:

    angular.module('customControl', ['ngSanitize']).
    directive('contenteditable', ['$sce', function($sce) {
      return {
        restrict: 'A', // only activate on element attribute
        require: '?ngModel', // get a hold of NgModelController
        link: function(scope, element, attrs, ngModel) {
          if (!ngModel) return; // do nothing if no ng-model
    
          // Specify how UI should be updated
          ngModel.$render = function() {
            element.html($sce.getTrustedHtml(ngModel.$viewValue || ''));
          };
    
          // Listen for change events to enable binding
          element.on('blur keyup change', function() {
            scope.$evalAsync(read);
          });
          read(); // initialize
    
          // Write data to the model
          function read() {
            var html = element.html();
            // When we clear the content editable the browser leaves a 
    behind // If strip-br attribute is provided then we strip this out if ( attrs.stripBr && html == '
    ' ) { html = ''; } ngModel.$setViewValue(html); } } }; }]);

    HTML

    Change me!
    Required!

    Source it from the original docs

提交回复
热议问题