如何从angularjs中的可编辑div中获取内容

时间:2014-12-13 17:12:27

标签: javascript angularjs angular-ngmodel

我试图从可编辑的div中获取内容。但我坚持为它实现角度模板。

我不确定如何将模型数据从html模板映射到角度控制器。

<div ng-repeat="todo in todos">                 
    <div class="todo.id" ng-model={{ ? }} contenteditable="true">
        <pre>{{ todo.text }}</pre>                          
    </div>
    <button type="button" class="btn btn-link"
        ng-click="editTodo(todo.id)">Edit</button>
</div>

我想传递

下的任何文字
<div class="todo.id"></div> 

由于我的div处于ng-repeat之下,我无法将ng-model设置为一个范围变量。

“ng-model = {{?}}”中应该包含哪些内容。或者有这种情况的解决方法。

请指导我。

1 个答案:

答案 0 :(得分:4)

要使div内容可以在角度中编辑,您需要创建一个contenteditable指令。

这里的角度文档中有一个例子:

https://docs.angularjs.org/api/ng/type/ngModel.NgModelController#custom-control-example

以及Gabo Esquivel关于此主题的精彩博客文章: http://gaboesquivel.com/blog/2014/in-place-editing-with-contenteditable-and-angularjs/

正如您在Gabriel的示例中所看到的,此类指令的代码将是这样的(我已添加一些注释以更好地了解最新情况):

app.directive("contenteditable", function() {
  return {
    require: "ngModel",
    link: function(scope, element, attrs, ngModel) {

      //read the text typed in the div (syncing model with the view)
      function read() {
        ngModel.$setViewValue(element.html());
      }

      //render the data now in your model into your view
      //$render is invoked when the modelvalue differs from the viewvalue
      //see documentation: https://docs.angularjs.org/api/ng/type/ngModel.NgModelController#
      ngModel.$render = function() {
        element.html(ngModel.$viewValue || "");
      };

      //do this whenever someone starts typing
      element.bind("blur keyup change", function() {
        scope.$apply(read);
      });
    }
  };
});
祝你好运!