我已經創建了一個自定義指令(「可重用組件」),它通過綁定到通過HTML參數傳遞給它的兩個對象來創建一個獨立的作用域。這很快就會出現問題,因爲我的文檔中有多達600個這樣的組件,導致1200名觀察者和性能不佳。在傳遞對象時,我不需要這些觀察者,只是某種形式的「綁定一次」功能。有沒有辦法完成這個(或解決方法),還是我需要重新設計我的代碼?將對象傳遞給自定義指令而不創建觀察者?
(傳遞數據爲一個或多個字符串,代替一個目的,是一種不希望的多選項。)
我已經創建了一個自定義指令(「可重用組件」),它通過綁定到通過HTML參數傳遞給它的兩個對象來創建一個獨立的作用域。這很快就會出現問題,因爲我的文檔中有多達600個這樣的組件,導致1200名觀察者和性能不佳。在傳遞對象時,我不需要這些觀察者,只是某種形式的「綁定一次」功能。有沒有辦法完成這個(或解決方法),還是我需要重新設計我的代碼?將對象傳遞給自定義指令而不創建觀察者?
(傳遞數據爲一個或多個字符串,代替一個目的,是一種不希望的多選項。)
你應該使用單向綁定:使用
scope : {
myField: '&'
....
}
,並在指令:
<my-directive my-field="::myDataObjectFromScope"></my-directive>
也許this將有助於
但是,如果值是不斷地在所有的,你應該使用服務將數據從業務邏輯中分離出來
可以不採用角指令範圍綁定手動評估對象。假設你有一個指令some-component
,並且你想傳遞一個config
對象,它保留了獨立的指令範圍。你可以做這樣的事情:
<some-component config="controller.config"></some-component>
然後指令看起來是這樣的:
.directive('someComponent', function() {
return {
scope: {
// some bindings, but not config
},
link: function(scope, element, attrs) {
var config = scope.$parent.$eval(attrs.config)
console.log(config)
}
}
})
$parent
必要在這裏,因爲指令範圍是孤立的,你想獲得外(父定義的對象) 範圍。
試試吧,看看它是否對你的設置有所幫助。
兩種方法的替代方案:在[AngularJS綜合指令API範圍](https://docs.angularjs.org/api/ng/service/$compile#-scope-)中記錄了雙向綁定。 – georgeawg