当状态完全加载并启动控制器时,我需要广播一个事件。我使用的是AngularJS v1.3.15和ui-router v0.2.11。
我尝试使用$stateChangeSuccess
事件,但控制器并没有抓住广播事件,因为在广播事件时它没有被发现。
在我的模块run
方法中,我有:
$rootScope.$on('$stateChangeSuccess', function (event) {
$rootScope.$broadcast('someEvent');
});
我的控制器有以下内容:
$scope.$on('someEvent', function () {
$scope.getList();
});
我尝试使用$viewContentLoading
和$viewContentLoaded
,但由于我有嵌套的控制器/视图,因此会多次触发,因此$scope.getList()
会多次运行。
解决这个问题的方法是什么?
答案 0 :(得分:0)
在您的情况下,不需要放置stateChange侦听器。 angular ui-router为您的用例提供了一个功能:在状态更改时解析控制器,请参阅ui-router on github。 此外,您应该使用返回承诺的服务,因为您的api调用是异步的,然后将服务注入控制器。请参阅"解决"在同一页面上回答您需求的部分。
答案 1 :(得分:0)
我通过捕获someEvent
错误并调用$scope.getList()
方法解决了这个问题,但在启动控制器时调用$scope.getList()
方法(位于控制器的底部)。 / p>