我正在查看this tutorial以在我的angular 1.5应用程序中实现发送/接收广播消息。
所以在控制器内部我有这个:
update(){
this.$rootScope.$broadcast('language_changed');
}
在另一个控制器中,我得到了:
$rootScope.$on('language_changed', function (event, data){
this.updateStore(); <--- this here is undefined
});
}
updateStore() {
this.store = {
..
language_id: this.LanguageService.get(),
}
}
我想知道如何在广播中掌握
this
。 This trick无效 最佳答案
您提供的答案不是一个正确的解决方案,您需要了解您在做什么,制造骇客不是一个解决方案。请阅读以下文章,以获取有关此内容与$ scope this vs $scope之间的区别的基本知识。
同样重要的是要了解角度事件:
$ emit-将事件发送到范围的三个角度
$ broadcast-将事件发送到角度三
此外,请查看以下代码段:snippet
当您有两个控制器时,您不需要同时从$ rootScope $广播事件并在$ rootScope上监听它,只需在$ scope级别上监听它,就不需要$ rootScope依赖注入。查看以下内容:
app.controller('DemoCtrl', function($scope, $rootScope) {
$scope.broadCastEvent = function() {
$rootScope.$broadcast('language_changed');
};
});
假设我们要在用户单击按钮时广播事件。该事件是沿着范围的三个角度发送的,因此正在监听此事件的控制器可以在范围级别上监听它,而无需$ rootScope依赖项注入,如下所示:
app.controller('DemoCtrl2', function($scope) {
$scope.$on('language_changed', function() {
$scope.eventFired = !$scope.eventFired;
});
})
另一种情况是,当您想要$ emit事件(将其发送到角度3)时,则需要将$ rootScope注入将要监听该事件的控制器,因为只有$ rootScope可以监听该事件。是从$ rootScope发出的。查看以下内容:
控制器$ emiting事件:
app.controller('DemoCtrl', function($scope, $rootScope) {
$scope.emitEvent = function() {
$rootScope.$emit('language_changed');
};
});
控制器捕获事件:
app.controller('DemoCtrl2', function($scope, $rootScope) {
$rootScope.$on('language_changed', function() {
$scope.eventFired = !$scope.eventFired;
});
})
试着玩一下代码片段,看看要从$ rootScope中发出$ emit事件,然后在$ scope级别捕获它,看看会发生什么。
希望这可以澄清一下。