2013-10-22 78 views
2

我有一個帶有2個對象模型model1的表單控制器:{name:「foo」} model2:{name:「model2」} 我創建了2個指令隔離範圍)。一個使用model1的Element only綁定,另一個使用僅使用model2的Attribute only綁定。Angularjs將2個指令作用域模型綁定到父控制器模型

的嵌套像這樣:

<div myattibute="model2"> 
    <mytag my-model="model"></mytag> 
</div> 

的屬性只指令不具有模板和標籤指令有一個模板。

問題是我在模型的mytag指令中出現undefined。

。有人看到問題並在plnkr中解釋它嗎?

http://plnkr.co/edit/Q23XqY?p=preview


部分解決: 與該myattribute指令使得它的工作只NG-transclude添加一個空的DIV模板的工作的例子。隨着我授權該屬性指令是在一個div它,我會希望它能夠在任何可放置的div,跨度等 這裏是工作示例: http://plnkr.co/edit/z0M5ys?p=preview

。如何爲NG-transclude影響範圍繼承?
。無法用沒有標記的業務邏輯創建此屬性嗎?

回答

1

最好避免隔離範圍,除非極少數情況下會增加不必要的複雜性。這是很簡單,只需使用$範圍$表綁定到表達式的屬性是這樣的:

$scope.$watch(attrs.myModel, function(newValue, oldValue) {}) 

$scope.$watch(attrs.myattribute, function(newValue, oldValue) {}) 

這樣,你的指令可以共享他們在被宣佈父範圍和處理使用$腕錶結合它表達式,或者如果需要,他們可以使用{ scope: true }創建子範圍。

這裏是一個可能的解決方案:http://plnkr.co/edit/mm2q67?p=preview

請記住,你myTag指令可以使用分離的範圍,如果你真的想這樣做的,但myattribute一個不能爲將打破範圍繼承鏈myTag

+0

有趣的一點。我試圖實現的是分層組件。例如,一個組件只能包含其中的其他組件的佈局信息,而屬性則用於額外的業務UI邏輯而無需演示。你認爲你的模型適合嗎? (因爲你可以看到,即使在一個簡單的例子中,我遇到了'='綁定的一些問題) –

+0

絕對不需要隔離作用域。 Angular核心幾乎從不在任何地方使用它們。不是說你永遠不會想要他們,但通常沒有必要。看看指令控制器是如何工作的。你可以有一個根控制器,你的「子」指令也可以有一個引用,並與根交互。 ngForm和ngModel指令可以做到這一點。 –

+0

哦,你也應該考慮你的指令*通常應該主要是表示邏輯,業務邏輯應該存在於服務中。當然,指令可以自由使用這些服務。 –

相關問題