0

我在重新评估作为自定义角度(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使用了类似的方法,但无法使其工作。 也许我这样做是完全错误的

回答

0

看着用attrs。 $observe改为:

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

}) 
+0

传递给属性的值不是插值的,所以我不能使用$ observe,不是吗? – Leonardo

+0

当您创建指令时,您可以将它们添加到您的范围中。范围:{showToolTip:'@',contentTooltip:'@'}' –