重新评估指令属性表达式

时间:2016-03-11 15:48:52

标签: angularjs angularjs-directive angularjs-scope angularjs-ng-repeat

我在重新评估作为自定义角度(1.2.28)指令的属性传递的表达式时遇到了麻烦。
我已经尝试了$eval$parse以及隔离和非隔离范围的所有可能组合。我无法理解这一点。

我有这样的事情:

<div ng-repeat="item in dataset">
    <my-directive 
      show-tooltip="user.level=='visitor' && item.memberOnly" 
      content-tooltip="isAdded(item) && 'Remove Me' || 'Add Me'">
    <my-directive>
</div>

问题是user.level可以更改,因为例如用户登录和(封闭)范围函数isAdded可以返回不同的值,具体取决于项目是否已添加到列表中。

指令:

angular.module("MyModule", [])
    .directive("myDirective", () {
        return {
            restrict: 'E',
            priority: 999,
            link: function(scope, elm, attrs) {
                showTooltip = scope.$eval(attrs.showTooltip);
                contentTooltip = scope.$eval(attrs.contentTooltip);

                // This works
                scope.$watch(attrs.contentTooltip, function(value) {
                    if( value and value != contentTooltip)
                        contentTooltip = value
                });

                // This never works
                scope.$watch(attrs.showTooltip, function(value) {
                    if( value and value != showTooltip)
                        showTooltip = value
                });

                // Do things..
            }
        }
    });

我不知道为什么但是第一只手表会起作用,第二只手表永远不会起作用。我在$ parse中使用过类似的方法,但也无法使用它。 也许我这样做完全错了

1 个答案:

答案 0 :(得分:0)

考虑使用attrs。$observe代替:

attrs.$observe('showTooltip', function(){

})