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使用了类似的方法,但无法使其工作。 也许我这样做是完全错误的
传递给属性的值不是插值的,所以我不能使用$ observe,不是吗? – Leonardo
当您创建指令时,您可以将它们添加到您的范围中。范围:{showToolTip:'@',contentTooltip:'@'}' –