【问题标题】:How long does broadcast exist?广播存在多长时间?
【发布时间】:2015-07-21 07:35:34
【问题描述】:

我的页面上有一个按钮。当用户点击我的按钮时,会执行以下代码:

as.controller('CustSummary', function($scope, $rootScope, $http, $routeParams, $location)
{
         var loadAbbDetails = function()
        {
            $rootScope.$broadcast('loadDetails');
        }

        $scope.viewAbbDetails = function()
        {
            loadAbbDetails();
        }
}

我已经在另一个控制器中附加了“loadDetails”的监听器:

as.controller('CustomerCtrl', function($scope, $rootScope, $http, $routeParams, $location)
{
  var loadDetails = function()
  {
     $scope.include = 'partials/customer/customerabbdetails.html';
  };

   $scope.$on("loadDetails",function(event,args) {
      loadDetails();
   });
}

我只是想知道这个听众“存在”了多久?当 loadDetails() 被触发时它会被销毁吗?

【问题讨论】:

  • 即使在执行之后,监听器也会留下来监听更多的loadDetails事件。
  • @Fissio:好的。因为我尝试在另一个控制器中使用它,像这样:pastebin.com/jwYgdBcE 但没有任何反应

标签: javascript angularjs broadcast


【解决方案1】:

当您在 $rootScope 上定义事件时,您应该在 $rootScope 而不是 $scope 上监听相同的事件。此外,正如您在 $scope 上定义的监听器,监听器被销毁,因为包含控制器的范围被销毁,即CustomerCtrl

【讨论】:

  • 谢谢。我现在已经改变了。但是如何从另一个控制器再次触发 loadDetails() 函数呢?
  • 再次使用 - $rootScope.$broadcast('loadDetails');如果你使用 $rootScope.on,那么它会从任何地方被监听
  • $rootScope 广播事件时,您没有义务在$rootScope 上收听 - $scope.$on 也可以正常工作。广播在范围层次结构中向下传播。 @布莱恩
  • 答案不正确。 $rootScope.$broadcast 表示您在 root 和所有嵌套范围上进行侦听。否则使用$rootScope.$emit
  • 我什么时候提到它不监听 $scope。确实如此,我只是说如果你要在 $rootScope 上监听,你不必一次又一次地重新定义监听器
猜你喜欢
  • 1970-01-01
  • 2015-10-10
  • 2019-10-08
  • 2010-12-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多