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

Значения, переданные атрибутам, не интерполированы, поэтому я не могу использовать $ observ, не так ли? – Leonardo

+0

Вы можете добавить их в свою область действия при создании директивы. 'scope: {showToolTip: '@', contentTooltip: '@'}' –

Смежные вопросы