我正在写一个有角度的小螺纹讨论板。我想将hallo.js用于我的内联编辑器(或者类似的东西,问题实际上并不依赖于hallo)。
以下是模板的相关摘录
<div ng-show="post.editing" ng-bind-html="post.body" edit-hallo class="col-xs-8"></div>
<div ng-show="!post.editing" ng-bind-html="post.body" class="col-xs-8"></div>
这是我的指示:
Appl.directive('editHallo', function () {
return {
restrict: 'AC',
scope: true,
link: function(scope, element, attr) {
element
.hallo({
plugins: {
'halloformat': {"bold": true, "italic": true, "strikethrough": true, "underline": true},
'halloheadings': [1,2,3],
'hallojustify' : {},
}
});
element.bind('hallomodified', function(event, data) {
scope.post.body = data.content;
});
}
};
});
这一切都运行得很好,但是黑客就在那里 - 当有一个被修改过的事件时,我手动说,scope.post.body = data.content
这不仅感觉像是一个黑客,它意味着只有当有一个我正在编辑的post.body项目,因此如果我想为配置文件编辑器或其他任何内容重新调整它,则效果不佳。
所以我的问题是:我应该如何重构这一点,以便相关的双向绑定有效?我尝试了一些看似显而易见的事情,例如在div中放置一个app-model="post.body"
,然后用=做一个隔离范围,但这并没有让我到处都是。理想情况下,我会使用ng-model指令传递适当的模型,但在我在线创建的所有指令示例和angular 1.2.0之间的某些时间似乎发生了变化。
答案 0 :(得分:0)
我有一段时间不使用AngularJS。
但我认为最好的办法是将范围改为:
scope:{ngModel:'='}
或
scope:{attribute:'='}
这样它应该进行两个数据绑定。一个在第一个案例中使用ng-model,或在第二个案例中使用属性。
然后你可以在事件发生时这样做:
scope.$apply(function(){
scope.ngModel=newValue;
})
需要应用,因此angular可以再次调用摘要循环并更新视图。
更多信息,我认为这有助于: http://docs.angularjs.org/guide/directive