我有一个自定义的角度指令,用图形表示我的webapp中的一个“活动”。我用这样的:如何将非字符串值传递给Angular指令?
<activity-box ng-repeat="act in activities"
model="act" active="{{currentActivity == act}}" />
我的指令具有隔离范围,并宣布model
和active
这样的:
appDirectives.directive('activityBox', function() {
return {
template: '<div ng-class="{activityActive: active == \'true\'}">{{model.name}}</div>',
restrict: 'E',
replace: true,
scope: {
model: '=',
active: '@'
},
link: ...
};
});
我没有关于model
属性担心,但我active
属性总是被作为一个字符串。当currentActivity == act
为真,则active
保持字符串值"true"
(而不是布尔值true
)或"false"
(而不是false
)。
这意味着虽然它在概念上是一个布尔值,但我必须将其视为一个字符串。例如,我想写ng-class="{activityActive: active}"
而不是ng-class="{activityActive: active == 'true'}"
。现在,如果我忘记了额外的部分,这总是评估为真,因为"false"
和"true"
都是真的。
有没有什么办法让我获得像这样的非字符串属性?达到此目的的最佳方式是什么?
当你用'@'传递参数时,它总是被视为一个字符串(在你的情况下,它首先被内插)。如果你想要一个表达式的值,你应该使用'='。 [PLNKR](http://plnkr.co/edit/7q5w6bYlwzrC80ht4eGK?p=preview)。 –
@arturgrzesiak非常感谢 - 我还没有意识到我也可以在使用'= ='映射的属性中使用完整表达式(甚至不可分配的表达式)。 –