从指令中获取价值的一般方法是什么?

时间:2013-10-10 00:31:41

标签: angularjs

我正在写一个有角度的小螺纹讨论板。我想将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之间的某些时间似乎发生了变化。

1 个答案:

答案 0 :(得分:0)

我有一段时间不使用AngularJS。

但我认为最好的办法是将范围改为:

scope:{ngModel:'='}

scope:{attribute:'='}

这样它应该进行两个数据绑定。一个在第一个案例中使用ng-model,或在第二个案例中使用属性。

然后你可以在事件发生时这样做:

scope.$apply(function(){
    scope.ngModel=newValue;
})

需要应用,因此angular可以再次调用摘要循环并更新视图。

更多信息,我认为这有助于: http://docs.angularjs.org/guide/directive