angular中控制器之間的傳值該怎麼實現?
01-05
答主老司機們的回答都是經典, 有一個回答有提到了angualr的編寫規範.
我們的項目在按照規範寫了之後真的在各方面都變得嗨了很多.這是規範的鏈接. 拿出來大家去看看angular-styleguide/zh-CN.md at master · johnpapa/angular-styleguide · GitHub-------------更新線,下為原文----------------------有找到這麼一個解決方案.Angularjs Controller 間通信機制這種方案如果父controller之間甚至父的父controller之間仍是兄弟關係如同這個案例這樣..還有什麼方案推薦么...其實還有一個想問的 就是有關於$scope.$id 還有 現在也獲取到了每個controller 的 $scope.$id($scope1的$id 為15,$scope2 的$id為22), 能有什麼辦法 在controller2中通過15 這個$scope1的$id從而獲取到$scope1 這個對象呢?畫圖不易 T.T 老司機們快來答題 -3-
每個controller都會有自己的scope,所有的scope都是屬於 $rootScope的子或者子的子...那麼問題就好解決了,通過 $rootScope.$broadcast 廣播的事件每個controller都能收到事件
上面的說的基本上很全了,我再總結補充一下吧。
通過Angular的話可以通過下面四種方法
1、event
這裡可以有兩種方式,一種是$scope.$emit,然後通過監聽$rootScope的事件獲取參數;另一種是$rootScope.$broadcast,通過監聽$scope的事件獲取參數。
這兩種方法在最新版本的Angular中已經沒有性能區別了,主要就是事件發送的方向不同,可以按實際情況選擇。2、service
可以創建一個專用的事件Service,也可以按照業務邏輯切分,將數據存儲在相應的Service中,因為已經有人提過了就不贅述了。3、$rootScope
這個方法可能會比較dirty一點,勝在方便,也就是把數據存在$rootScope中,這樣各個子$scope都可以調用,不過需要注意一下生命周期4、直接使用$scope.$$nextSibling及類似的屬性
類似的還有$scope.$parent。這個方法的缺點就更多了,官方不推薦使用任何$$開頭的屬性,既增加了耦合,又需要處理非同步的問題,而且scope的順序也不是固定的。不推薦另外就是通過本地存儲、全局變數或者現代瀏覽器的postMessage來傳遞參數了,除非特殊情況,請避免這類方式。
最後
johnpapa/angular-styleguide · GitHub
這個代碼風格可以參考一下,對代碼的整體組織可以有些幫助以上
參考scope - What"s the correct way to communicate between controllers in AngularJS?AngularJS Services cross controller communication, data persistencejavascript - How can I pass variables between controllers?看我這個栗子的最後兩個選項卡
angularjs scope
然後,原理在這裡:AngularJS實例教程(二)——作用域與事件 · Issue #18 · xufei/blog · GitHub如其他答案,可以用event。
另外,我的經驗是,盡量不要用event傳數據。應該建立一個service來保存數據,並且設置相應getter/setter,具體如下:
每個controller依賴service, call service.setter(...)
統一的service.setter(...)在改完數據後可以$emit("data-updated")
每個controller里$on("data-updated", function(){ $scope.data = service.getData() })現在這麼看來,其實就是React里的store的概念。。。
---原答案---
直接建一個service,不要用什麼事件,項目一大N多個controller或者N久再去維護會玩死你,service里提供存和取的方法,簡單明了,API容易查找和修改,調試也方便無混亂的依賴關係如果不在一個module里怎麼辦
mark
推薦閱讀:
※angularjs中不同頁面controller中數據傳遞的問題?
※AngularJS的數據雙向綁定是怎麼實現的?
※AngularJS 1.x 的缺點如何解決?
TAG:JavaScript | Nodejs | 前端開發框架和庫 | AngularJS |