我是Angular的新手,我試圖創建一個指令並對孤立的範圍屬性有疑問。如果我有一個指令:AngularJS指令 - 是否需要隔離範圍屬性?
MyApp.directive('myDirective', function() {
return {
scope: {
symbol: '@'
},
...
是否有可能作出某種方式所需的符號?在我的情況下,如果它沒有提供指令將無法正常工作。
我是Angular的新手,我試圖創建一個指令並對孤立的範圍屬性有疑問。如果我有一個指令:AngularJS指令 - 是否需要隔離範圍屬性?
MyApp.directive('myDirective', function() {
return {
scope: {
symbol: '@'
},
...
是否有可能作出某種方式所需的符號?在我的情況下,如果它沒有提供指令將無法正常工作。
您可以使用第二個指令並在第一個指令中要求。對於myDirective
實際需要symbol
MyApp.directive('myDirective', function() {
return {
scope: {
symbol: '@'
},
require: 'symbol',
link: angular.noop //this is needed to check for the required controller
...
}
}
MyApp.directive('symbol', function() {
return {
controller: angular.noop
}
}
控制器是必要的。請記住,像這樣的情況下,用命名空間爲指令添加前綴至關重要。
這裏是一個jsfiddle這個工作的例子。在這個例子中,我已經覆蓋了角度錯誤服務,對所有錯誤發出警報。您可以看到錯誤的原因是<div>
缺少所需的指令。
這絕對有效,但它可以包含在單個指令中。在鏈接函數中檢查attrs是否可能,以及何時丟失拋出錯誤?我會嘗試一下,看看我能否得到它的工作。我想答案是你實際上不需要設置屬性,但必須編寫你自己的代碼來檢查這個。 – Elliot
我發現了一種爲此使用的鏈接函數: 'code' 鏈路:功能(範圍,元件,ATTRS){ 如果(attrs.requiredAttr ==未定義){// 手柄誤差作爲必要 } } 'code' – Elliot
是的,在鏈接中檢查它是你可以隨時做的事情。使用'angular.isUndefined(attrs.requiredAttr)'是一種更安全的方法。我傾向於使用'require'屬性,因爲我可以隔離代碼以在自己的指令中驗證attr,並且角度拋出一個很好的'$ compile'錯誤。這也意味着您可以編寫更具體的測試,而且您不必測試缺少的attr代碼作爲主要指令的一部分。如果你真的想要先進的話,你可以動態地建立所需的指令,然後再進行角引導 – fooby
如果某人未能提供該屬性,您會希望什麼行爲? –
您的指令鏈接或控制器函數檢查scope.symbol未定義或您認爲錯誤的任何值然後拋出和錯誤如果沒有給出 –
這將在開發過程中使用。在設計視圖時,通常會忘記或沒有意識到要求指令正確工作的特定屬性。需要提供某種視覺線索才能讓他們知道正確的用法。它可能是一個警報或敬酒,甚至用幫助文本替換模板的內容。 – Elliot