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:'@'}' –