我在试着学习角度事件听力。用户单击按钮后,控制器查询数据库,并在按钮的处理程序中返回一个值。我很难将这个值传递给$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。然后事件不会被发出,或者侦听器不会捕捉到它。
发布于 2017-06-10 01:17:01
$emit向上分派一个事件. $broadcast向下分派一个事件
详细解释
$rootScope.$emit只允许其他$rootScope侦听器捕获它。当您不希望每个$scope都得到它时,这是很好的。主要是高层交流。把它想象成成年人在房间里互相交谈,这样孩子们就听不见了。
$rootScope.$broadcast是一种让几乎所有事物都能听到它的方法。这相当于父母大喊晚餐已经准备好了,所以家里的每个人都听到了。
$scope.$emit就是当你想让$scope、它的父母和$rootScope听到这个事件的时候。这是一个在家里向父母抱怨的孩子(但不是在其他孩子能听到的杂货店)。
$scope.$broadcast是为$scope本身和它的孩子准备的。这是一个小孩对它的毛绒动物低声说话,所以他们的父母听不见。
https://stackoverflow.com/questions/44468352
复制相似问题