1

我想像这样以角度定义页面标题:

一个标准PageController

angular.module('admin').controller('AdminController',
    function($scope) {

        // emit an event to rootscope
        $scope.$emit('setPageTitle','Administration');
    }
);

然后在运行块中:

angular.module('core').run(function($rootScope){
    $rootScope.$on('setPageTitle',function(evt,title){
        $rootScope.$broadcast('setPageTitle',title);   // The error is thrown from this line
    });
});

最后在PageHeaderController

angular.module('core').controller('PageHeaderController',
    function($scope) {

        $scope.$on('setPageTitle',function(evt, title){
            $scope.pageTitle = title;
        });
    }
);

这样,我不需要注入$rootScopeeach PageController,但这$scope通常用于其他任务。

但是我在第二个代码块中上面标记的行处收到此错误

RangeError:超出最大调用堆栈大小

这里有什么问题?我看不出是什么导致了无限循环,因为我想我只是做了这些步骤:

  • 从孩子发出
  • 在 rootscope 中处理并广播给孩子
  • 处理特定的孩子
4

3 回答 3

3

将“ setPageTitle”事件名称更改为其他名称应该可以,尝试这样

angular.module('core').run(function($rootScope){
    $rootScope.$on('setPageTitle',function(evt,title){
        $rootScope.$broadcast('setPageTitleCtrl',title);   // The error is thrown from this line - changed 'setPageTitle' to 'setPageTitleCtrl'
    });
});

控制器:

angular.module('core').controller('PageHeaderController',
    function($scope) {

        $scope.$on('setPageTitleCtrl',function(evt, title){
            $scope.pageTitle = title;
        });
    }
)
于 2015-07-21T09:21:25.180 回答
2

这里的原因是 $rootScope 能够捕获自己广播的事件。于是无限循环发生了。

这里对 $rootScope 的 $emit, $broadcast, $on 行为有非常清晰的解释

于 2016-06-24T04:08:22.927 回答
1
$rootScope.$on('setPageTitle',function(evt,title){
    $rootScope.$broadcast('setPageTitle',title);   // The error is thrown from this line
});

这是原因吗?尝试通过跟踪方向给出不同的事件名称。

于 2015-07-21T09:17:15.077 回答