說我有以下爲我directive定義的一部分:有沒有辦法爲隔離範圍別名提供默認值?
scope: {
prop1: '@'
}
有沒有辦法爲PROP1得到一個默認值,如果指令沒有爲prop1屬性?當然,我可以檢查它是否是自己定義並設置的,但是the property isn't always set when you would expect。我只是想知道是否有任何我在文檔中遺漏的語法,或者是否有一個很好的標準方法來做到這一點。謝謝。
說我有以下爲我directive定義的一部分:有沒有辦法爲隔離範圍別名提供默認值?
scope: {
prop1: '@'
}
有沒有辦法爲PROP1得到一個默認值,如果指令沒有爲prop1屬性?當然,我可以檢查它是否是自己定義並設置的,但是the property isn't always set when you would expect。我只是想知道是否有任何我在文檔中遺漏的語法,或者是否有一個很好的標準方法來做到這一點。謝謝。
這取決於您要分配的默認值。如果你想默認父範圍的名稱,設置在該指令的compile
功能的默認屬性值將工作:
compile: function(element, attrs) { if (attrs.person == undefined) { attrs.$set("person", "person"); } ...
如果你想指令提供的默認值,就有點tricker作爲Angular不會讓您分配到隔離範圍中的別名(您將從試圖將分配傳播到獨立父級作用域的觀察者處得到「不可分配模型表達式」異常)。但是,您可以通過將該屬性標記爲可選項來避免這種情況(這意味着當屬性被忽略時,Angular不會註冊監聽器)。
scope: { person: "=?" }, link: function(scope, element, attrs) { if (scope.person == undefined) { scope.person = "Bob"; } ... }
我從來沒有在範圍屬性中看到'?'記號。有沒有文件記錄的地方?或者小提琴表明工作? – dnc253
https://github.com/angular/angular.js/commit/ac899d0da59157fa1c6429510791b6c3103d9401 – epeleg
有兩件事:1)使用'angular.isUndefined(...)'和2)在這裏記錄:https://docs.angularjs。 org/api/ng/service/$ compile#directive-definition-object – icfantv