如何在事件接收器角度访问此内容



我正在浏览本教程,以在我的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。这个技巧不起作用

您提供的答案不是一个适当的解决方案,您需要了解您在做什么,制作黑客不是解决方案。请阅读以下文章,以获取有关此和$范围之间差异的基本知识。

重要的是要了解角度事件:

$ emit-将事件发送到示波器的三个角度

$广播 - 在Angular三

下发送事件

此外,请查看以下片段:片段

当您有两个控制器时,您无需$ $ $从$ rootscope播放活动,然后在$ rowotscope上听$,可以简单地在$示波器级别上聆听,$ 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;
   });
})

另一种情况是当您要$发射事件时(将其发送到Angular 3(,然后您需要将$ Rootscope注入将听取该事件的控制器,因为只有$ Rootscope可以在来自$ Rootscope的事件是 $ emit 。查看以下内容:

控制器$发射事件:

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发出$的事件,并尝试在$范围级别上捕捉它。

希望这有点澄清。

解决方案很简单,使用JavaScript bind hack:

$rootScope.$on('language_changed', function (event, data){
    this.updateStore();
}.bind(this));  <-- bind makes the inner this same as outer this.. 😂

相关内容

  • 没有找到相关文章

最新更新