如何$scope使用.$emit和.$on方法将对象从一个控制器发送到另一个控制器?
$scope
.$emit
.$on
function firstCtrl($scope) { $scope.$emit('someEvent', [1,2,3]); } function secondCtrl($scope) { $scope.$on('someEvent', function(mass) { console.log(mass); }); }
它不按我认为的方式工作。如何做$emit和$on工作?
$emit
$on
首先,父子范围关系确实很重要。你有两种可能性发出某些事件:
$broadcast
我对你的控制器(作用域)关系一无所知,但是有几种选择:
如果scope of firstCtrl是作用域的父级,则secondCtrl你的代码应通过替换$emit为$broadcastin来工作firstCtrl:
firstCtrl
secondCtrl
$broadcastin
function firstCtrl($scope) { $scope.$broadcast('someEvent', [1,2,3]); } function secondCtrl($scope) { $scope.$on('someEvent', function(event, mass) { console.log(mass); }); }
如果你的范围之间没有父子关系,则可以注入$rootScope控制器并将事件广播到所有子范围(即secondCtrl)。
$rootScope
function firstCtrl($rootScope) { $rootScope.$broadcast('someEvent', [1,2,3]); }
$scope.$emit
function firstCtrl($scope) { $scope.$on('someEvent', function(event, data) { console.log(data); }); } function secondCtrl($scope) { $scope.$emit('someEvent', [1,2,3]); }