我正在查看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(),

        }
  }


我想知道如何在广播中掌握thisThis 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级别捕获它,看看会发生什么。

希望这可以澄清一下。

10-01 00:59
查看更多