本篇文章跟大家介紹一下angular控制器通訊的4種方式。有一定的參考價值,有需要的朋友可以參考一下,希望對大家有幫助。
【相關推薦:《angular教學》】
先概括angular控制器通訊的4種方式:
作用域繼承。
透過$scope廣播事件。
事件發射器模組。
服務。
1、作用域的繼承
子作用域可以存取宣告在它們的祖先作用域中的變數和函數。
<div ng-controller="Controller1"> <div ng-controller="Controller2"> this prints '42':{{answer}} </div> </div> m.controller('Controller1', function ($scope) { $scope.answer = 42; }); m.controller('Controller2', function ($scope) { console.log($scope.answer); });
2、透過$scope廣播事件
$emit呼叫可以向作用域上方冒泡,$broadcast將向子孫作用域傳播,$on可以註冊監聽器。
<div ng-controller="Controller1"> <div ng-controller="Controller2"> </div> </div> m.controller('Controller1', function ($scope) { $scope.$on('ping', function (){ console.log('pong'); }); $scope.$broadcast('broadcast'); }); m.controller('Controller2', function ($scope) { $scope.$emit('ping'); $scope.$on('broadcast', function (){ console.log('broadcast'); }); });
3、事件發射器模組event-emitter
event-emitter模組運作方式類似於作用域發射器,它們有3個關鍵的差異:
event-emitter是獨立於作用域的,所以在無法存取作用域的服務中使用它是非常理想的。
將使用的函數命名為.on(),.emit()。
沒有對應的$broadcast()函數。
<script type="text/javascript" src="angular.js"></script> <script type="text/javascript" src="event-emitter.js"></script> <script type="text/javascript"> var app = angular.module('app', []); app.factory('userService', function ($timeout, $window) { var emitter = $window.emitter(); var user = {}; //模拟http错误 $timeout(function () { user.emit('error', 'Could not connect to server'); }, 1000); return user; }); app.factory('profileService', function (userService) { var ret = { user: userService, }; userService.on('error', function () { console.log('get error'); }); return ret; }); </script>
4、最常用的通訊是服務
因為服務是單例,所以在任何元件內改變服務的值都會影響其他元件,用法很簡單,只要把服務列為依賴就可以了,如上述程式碼所示。
更多程式相關知識,請造訪:程式設計教學! !
以上是淺談angular控制器通訊的4種方式的詳細內容。更多資訊請關注PHP中文網其他相關文章!