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