【问题标题】:Strange angular data binding in contenteditable elementcontenteditable 元素中奇怪的角度数据绑定
【发布时间】:2014-06-23 00:24:49
【问题描述】:

使用标记:

<body ng-app="app" ng-controller="ctrl">
  <h1>Type below in the editable div</h1>
  <h3>Use ng-bind:</3>
  <div class="editable" contenteditable=true obj="obj1" ng-bind="obj1.content"></div>
  <h3>Content:</h3>
  <div>{{obj1.content}}</div>

  <h3>Use interpolation</h3>
  <div class="editable" contenteditable=true obj="obj2">{{obj2.content}}</div>
  <h3>Content:</h3>
  <div>{{obj2.content}}</div>
</body>

还有一点js:

var app = angular.module('app', []);

app.controller('ctrl', function($scope) {
  $scope.obj1 = {
    content: ''
  };
  $scope.obj2 = {
    content: ''
  };
});

app.directive('contenteditable', function() {
  return {
    scope: {
      obj: '='
    },
    restrict: 'A',
    link: function(scope, elem) {
        elem.on('keyup', function() {
          var text = elem.text();
            scope.obj.content = text;
            scope.$apply();
        });
     }
  };
});

我试图用两种方式数据绑定编写一个 contenteditable 指令。但是奇怪的事情发生了:

使用 ngBind: 键入类似 'a' 的内容,插入符号会跳回第一个位置,而不是在 'a' 之后;

使用插值:输入'a'之类的东西,它会变成'aa'。

现场演示:http://jsbin.com/bifabuyu/5/edit

这里发生了什么,我该如何解决?

【问题讨论】:

    标签: html angularjs contenteditable


    【解决方案1】:

    我解决了你的插值问题 - 只需从

    中删除 {{obj2.content}}
    <div class="editable" contenteditable=true obj="obj2">{{obj2.content}}</div>
    

    它会正常工作。发生“加倍”符号是因为您的指令绑定到“obj2”,并且在指令内部您打印对象“obj2”。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-23
    • 1970-01-01
    • 2013-04-21
    • 2020-05-27
    • 2015-10-10
    • 1970-01-01
    相关资源
    最近更新 更多