Tho*_*hoe 2 addeventlistener eventemitter angularjs
我正在尝试学习 Angular 事件监听。用户单击按钮后,控制器会查询数据库并在按钮的处理程序中返回一个值。我无法将此值传递给$scope以便其他函数可以访问数据。
第一个问题:这就是事件监听器的用途吗?还有另一种方法可以做我想做的事吗?
下一个问题:为什么这段代码不起作用:
app.controller('EmitterCtrl', function($scope) {
console.log("Emitter controller.");
$scope.buttonClick = function() {
console.log("Button clicked!"); // this works
$scope.$emit('myEvent', 'Clicked!'); // child $scope
};
$scope.$on('myEvent'), function(event, data) { // parent $scope
console.log("I heard it!"); // doesn't work
console.log(event);
console.log(word);
};
});
<div ng-controller="EmitterCtrl">
<button type="button" ng-click="buttonClick()">
Click me!
</button>
</div>
Run Code Online (Sandbox Code Playgroud)
用户单击按钮,事件处理程序在控制器中触发。处理程序创建一个子级$scope,因此$emit将事件发送到父级$scope。那么事件不会被发出,或者侦听器不会捕获它。
$emit 向上调度事件 ... $broadcast 向下调度事件
详细解释
$rootScope.$emit只让其他$rootScope听众听到。当您不希望每个人都$scope得到它时,这很好。主要是高层沟通。可以将其想象为成年人在房间里互相交谈,这样孩子们就听不到他们的声音。
$rootScope.$broadcast是一种让几乎所有东西都能听到的方法。这相当于父母大喊晚餐准备好了,这样家里的每个人都能听到。
$scope.$emit就是当你想要那个$scope和它的所有父母并$rootScope听到这个事件的时候。这是一个孩子在家里向父母抱怨(但不是在其他孩子可以听到的杂货店)。
$scope.$broadcast是为了它$scope本身和它的孩子。这是一个孩子对着毛绒玩具窃窃私语,这样他们的父母就听不到。