У меня возникли проблемы с переоценкой выражения, переданного как атрибут пользовательской угловой (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, но не мог заставить его работать. Возможно, я делаю это совершенно неправильно
Значения, переданные атрибутам, не интерполированы, поэтому я не могу использовать $ observ, не так ли? – Leonardo
Вы можете добавить их в свою область действия при создании директивы. 'scope: {showToolTip: '@', contentTooltip: '@'}' –