在AngularJS中編寫指令時,如何確定是否不需要新的作用域,新的子作用域或新的隔離作用域?我正在尋找一些可以用來幫助確定在編寫新指令時使用哪種類型的范圍的指南。理想情況下,我想要一個類似于流程圖的東西,它會引導我解決一堆問題并彈出正確答案 - 沒有新的新范圍,新的子范圍或新的隔離范圍 - 但這可能要求太多。這是我目前微不足道的指導方針:如果使用該指令的元素使用ng-model,請不要使用隔離范圍 請參閱我是否可以將ng-model與隔離范圍一起使用?而為什么格式化并不孤立的范圍內工作?如果指令未修改任何范圍/模型屬性,請不要創建新范圍如果指令封裝了一組DOM元素(文檔說“復雜的DOM結構”)并且該指令將用作元素,或者在同一元素上沒有其他指令,則隔離范圍似乎運行良好。我知道在元素上使用帶有隔離范圍的指令會強制同一元素上的所有其他指令使用相同(一個)隔離范圍,因此當使用隔離范圍時,這不會嚴重限制嗎?我希望來自Angular-UI團隊的一些人(或其他已寫過許多指令的人)可以分享他們的經驗。請不要添加簡單地說“為可重用組件使用隔離范圍”的答案。
3 回答

HUH函數
TA貢獻1836條經驗 獲得超4個贊
我的個人政策和經驗:
隔離:私人沙箱
我想創建許多范圍方法和變量,這些方法和變量僅由我的指令使用,并且從未被用戶看到或直接訪問過。我想將可用的范圍數據列入白名單。我可以使用transclusion允許用戶跳回到父范圍(不受影響)。我不希望在被抄襲的孩子中可以訪問我的變量和方法。
兒童:內容的一個小節
我要創建范圍的方法和變量CAN用戶訪問,但是是不相關的我的指令的情況下外周邊范圍(兄弟姐妹和父母)。我還想讓所有父范圍數據透明地滲透。
無:簡單的只讀指令
我真的不需要搞亂范圍方法或變量。我可能正在做一些與范圍無關的事情(例如顯示簡單的jQuery插件,驗證等)。
筆記
你不應該讓ngModel或其他東西直接影響你的決定。你可以通過像
ng-model=$parent.myVal
(孩子)或ngModel: '='
(孤立)這樣的事情來規避奇怪的行為。Isolate + transclude將恢復兄弟指令的所有正常行為并返回到父作用域,因此不要讓它影響您的判斷。
不要混淆沒有的范圍,因為它就像將數據放在DOM的下半部分的范圍而不是上半部分是有意義的。
注意指令優先級(沒有具體的例子說明這會影響事物)
注入服務或使用控制器跨任何范圍類型的指令進行通信。您還
require: '^ngModel'
可以查看父元素。
- 3 回答
- 0 關注
- 613 瀏覽
添加回答
舉報
0/150
提交
取消