9

有没有办法在 AngularJS 指令中观察函数表达式的值变化?我有以下 HTML 和 JavaScript,{{editable()}}模板中的插值显示该值评估为真,而在 Chrome 中检查 HTML 元素显示contenteditable为假。

关于如何观察此函数的值变化并相应地更新元素 attr 的任何建议?还是有更好的方法来实现这一目标?(我仍然想评估这个功能。)

HTML:

<h4 editable="account.hasRole('ROLE_ADMIN')" content="doc.heading"></h4>

Javascript:

mod
    .directive(
            'editable',
            function() {
                return {
                    restrict : 'A',
                    template : '<button class="btn pull-right"><i class="icon-pencil"></i></button>{{content}} ({{editable()}})',
                    scope : {
                        'content' : '=',
                        'editable' : '&'
                    },
                    link : function(scope, element, attrs) {
                        scope.$watch('editable', function(newValue) {
                            element.attr('contenteditable', newValue());
                        });
                    }
                };
            });
4

2 回答 2

10

尝试戴上手表'editable()'而不是'editable'

说明:需要这样做的原因是因为'&'指向属性表达式的动态生成的函数包装器,而不是表达式本身。这个特殊的包装函数返回 的值account.hasRole('ROLE_ADMIN')

于 2013-05-23T03:13:49.740 回答
8

我也更喜欢做这样的事情:

scope.$watch(function () {
  return scope.editable();
}, function (val) {
   // ...
});
于 2013-05-23T08:16:08.597 回答