我有一個自定義的角度指令,用圖形表示我的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非常感謝 - 我還沒有意識到我也可以在使用'= ='映射的屬性中使用完整表達式(甚至不可分配的表達式)。 –