2017-09-05 53 views
1

我有一個父範圍指令,我也有另一個子範圍指令。在一個模板中,我有幾個父子範圍。喜歡這個。多個親子範圍事件觸發器問題

ParentScope1 
- ChildScope1 
ParentScope2 
- ChildScope2 

如果我在Parent中更改一個值,我會將它廣播給Child。我正在使用$rootScope.$broadcast從父母進行廣播。我正在使用$rootScope.$on來接受這個孩子的變化。

我的問題是:

現在,如果我更改了ParentScope1的值,它會廣播ChildScope1。然後我將在ParentScope2中更改一個值,它將廣播到ChildScope2,但它也將廣播到ChildScope1。

我想:在ParentScope1中更改一個值,它將廣播到ChildScope1。在ParentScope2中更改一個值,它將廣播到ChildScope2。我在網上搜索了一段時間,但沒有找到解決方案。也許我沒有使用正確的關鍵字進行搜索。請指教。謝謝。

+1

爲什麼使用'$ rootScope'而不是'$ scope'? [查看本文](https://toddmotto.com/all-about-angulars-emit-broadcast-on-publish-subscribeing/)以獲取有關angularjs事件系統的更多信息。 –

+0

@StanislavKvitash我不知道,因爲這是一個遺留的代碼,寫這個的人已經不在了。 – user8565199

+0

@StanislavKvitash我不認爲如果我使用$範圍將解決這個問題? – user8565199

回答

0

在你的指令定義設置

scope : true 

然後用

$scope.$broadcast 
$scope.$on 

這也許應該工作正常

發佈您的代碼,所以我們有這個問題的一個更好的視野

0

您正在尋找父母與孩子指令之間的溝通,您可以使用b elow方法,但兩個指令都將使用此緊密耦合 -

需要控制器 - 獲取父節點控制器相同節點的句柄。 要求:'^ parnetDireName'用於在父節點上查找控制器。沒有^,它只會找到相同的節點。 '?'當控制器不可用時使用「'^ ^」,「?^^」,「^^」,第四個參數用於獲取控制器,它可以使用控制器的prop/method。訪問多個控制器,因爲要求將具有陣列 - 需要:[「^ DIR1」,「^ DIR2」] 鏈接功能將具有CNTRL陣列,它可以是通過數組元素訪問在同一序列

嵌套指令鏈接前,後鏈接功能 -

  • 默認鏈接功能後鏈接功能
  • 使用關鍵字後定義它執行明確
  • 兒童帖子鏈接功能首先,如果父母和孩子都具有信息鏈接功能
  • 父鏈接功能是執行第一預鏈接如果雙方父母和孩子的功能。
  • 控制器被鏈接函數

--------------------------------- 另一個之前執行decoupled way --------------------- 有三種方法可以設置指令範圍和包含控制器範圍之間的關係 - - 指令共享範圍與包含控制器。任何新的
項目/指令修改的項目將成爲父範圍的一部分。它是 默認或範圍:虛假 - 指令與繼承範圍。通過包含控制器,任何通過指令添加的新項目都將不可見。指令作用域可以讀取來自父作用域的所有數據。使用範圍:true屬性來激活它。子可以查看父數據並可以覆蓋或創建新變量。
- 隔離範圍。兩個範圍都不能讀取其他數據。對象映射是讀取父數據所必需的。指令作用域映射將具有對象名稱,同一對象將從html傳遞。有三種方法可以接收參數 - - 完成對象數據 - >'='被使用 - 簡單值像標誌一樣使用字符串 - '@'。 '@sampleVar',其中sampleVar是html中變量的名稱。 範圍{ cntrollerStrVarName: '@htmlStrVarName' }
- 功能參數 - '&' 用於傳遞參數。可以使用({paramName:'value'})覆蓋方法參數