$ on使用$ broadcast

时间:2017-12-22 08:33:45

标签: javascript angularjs

在我的角度应用程序中,有2个控制器。

file1.js

angular.module(appName).controller('controller1', function($scope,$state){

   $scope.goTofile2 = function(){
      $state.go('file2');
   }

   $scope.$on('broadcastFromFile2', function () {
    // something to do
});

});

file2.js

angular.module(appName).controller('controller1', function($rootScope,$state){

   $scope.triggerBroadcast = function(){
      $rootScope.$broadcast('broadcastFromFile2');
   }

});

方案

从文件1开始,应用程序将在触发$scope.goTofile2()时导航到文件2。一旦到达文件2,点击按钮$scope.triggerBroadcast()将被触发,它将依次触发广播broadcastFromFile2,而某些代码则写在$scope.$on('broadcastFromFile2', function () { })中,该文件位于file1

问题

单击文件2中的按钮后,$broadcast将被触发,但相应的$ on无效。可能的原因是什么?是因为这些不是父母 - >儿童控制员?

1 个答案:

答案 0 :(得分:0)

IComparable逻辑没有被触发,因为' controller1' (file1)导航到' controller2' (文件2)。如果您想实现此$on$broadcast逻辑,请将其置于服务中。

服务是单身,他们将在您的控制器上维护一个实例。

所以在$on中你可以有一个如下声明:

controller1

并且在myService.setEventListener() 中你可以有如下声明:

controller2

像这样创建一个新服务:

myService.broadcastEvent()