我正在尝试学习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>
用户单击该按钮,事件处理程序将在控制器中触发。处理程序会创建一个子$scope
,因此$emit
会将事件发送给父$scope
。然后事件没有发出,或听众没有抓住它。
答案 0 :(得分:3)
$ emit向上调度一个事件... $ broadcast调度一个事件 向下
详细说明
$rootScope.$emit
只允许其他$rootScope
侦听器捕获它。如果您不希望每个$scope
获得它,那么这很好。主要是高级别的沟通。把它想象成成年人在一个房间里互相交谈,这样孩子们就听不到了。
$rootScope.$broadcast
是一种可以让所有内容听到它的方法。这相当于父母大喊大叫,晚餐准备就绪,所以房子里的每个人都听到了。
$scope.$emit
是您希望$scope
及其所有父母和$rootScope
听到此事件的时间。这是一个孩子在家里向父母抱怨(但不是在其他孩子可以听到的杂货店)。
$scope.$broadcast
适用于$scope
本身及其子女。这是一个小孩子对它的毛绒动物说悄悄话,所以他们的父母听不到。