2016-03-06 52 views
3

我已經創建了一個自定義指令(「可重用組件」),它通過綁定到通過HTML參數傳遞給它的兩個對象來創建一個獨立的作用域。這很快就會出現問題,因爲我的文檔中有多達600個這樣的組件,導致1200名觀察者和性能不佳。在傳遞對象時,我不需要這些觀察者,只是某種形式的「綁定一次」功能。有沒有辦法完成這個(或解決方法),還是我需要重新設計我的代碼?將對象傳遞給自定義指令而不創建觀察者?

(傳遞數據爲一個或多個字符串,代替一個目的,是一種不希望的多選項。)

+0

兩種方法的替代方案:在[AngularJS綜合指令API範圍](https://docs.angularjs.org/api/ng/service/$compile#-scope-)中記錄了雙向綁定。 – georgeawg

回答

2

你應該使用單向綁定:使用

scope : { 
    myField: '&' 
    .... 
} 

,並在指令:

<my-directive my-field="::myDataObjectFromScope"></my-directive> 

也許this將有助於

但是,如果值是不斷地在所有的,你應該使用服務將數據從業務邏輯中分離出來

2

可以不採用角指令範圍綁定手動評估對象。假設你有一個指令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必要在這裏,因爲指令範圍是孤立的,你想獲得外(父定義的對象) 範圍。

試試吧,看看它是否對你的設置有所幫助。

+0

這是做什麼要求,但接受的答案有工作的優點,即使在ng重複(不能從父範圍拉對象)。 – Vestling

+0

是的,的確,當然。我完全忘記了一次性裝訂。 – dfsq

相關問題