筆記一下Angularjs的事件處理機制的運作方法:
First of all, parent-child scope relation does matter. You have two possibilities to emit some event:
$broadcast-- dispatches the event downwards to all child scopes,$emit-- dispatches the event upwards through the scope hierarchy.
I don't know anything about your controllers (scopes) relation, but there are several options:
- If scope of
firstCtrlis parent of thesecondCtrlscope, your code should work by replacing$emitby$broadcastinfirstCtrl:function firstCtrl($scope){ $scope.$broadcast('someEvent', [1,2,3]); } function secondCtrl($scope){ $scope.$on('someEvent', function(event, mass) {console.log(mass)}); } - In case there is no parent-child relation between your scopes you can inject
$rootScopeinto the controller and broadcast the event to all child scopes (i.e. alsosecondCtrl).function firstCtrl($rootScope){ $rootScope.$broadcast('someEvent', [1,2,3]); } - Finally, when you need to dispatch the event from child controller to scopes upwards you can use
$scope.$emit. If scope offirstCtrlis parent of thesecondCtrlscope:function firstCtrl($scope){ $scope.$on('someEvent', function(event, data) { console.log(data); }); } function secondCtrl($scope){ $scope.$emit('someEvent', [1,2,3]); }
沒有留言:
張貼留言
留個話吧:)