我试图从可编辑的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 = {{?}}”中应该包含哪些内容。或者有这种情况的解决方法。
请指导我。
答案 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);
});
}
};
});
祝你好运!