我试图广播初始值听众数量不确定的有$广播
我打电话$ rootScope。$用NG-INIT播出。广播在页面加载中正常工作,但听众没有注册。然而,接下来的电话会被正确接收。
html;
<div class="panel panel-body" ng-controller="Location" ng-init="setActiveLocation({{ defaultLocation }})">
的方法;
$scope.setActiveLocation = function(location) {
console.log('broadcast:', location);
$rootScope.$broadcast('setActiveLocation', location);
};
听众;
$scope.$on('setActiveLocation', function(event, location)
{
console.log('recieved: ', event)
$scope.clearHistory();
$scope.refreshHistory(location);
});
我的问题是这样的;在页面准备就绪时应该调用ng-init,那么为什么在listeners准备好之前调用它呢?我应该怎么做才能防止这种情况?
您应该考虑将调用setActiveLocation移动到控制器。把它放在ng-init中是将逻辑的一部分放在html中,而没有什么好处。 [ng-init文档](https://docs.angularjs.org/api/ng/directive/ngInit)说:“该指令可能会被滥用,从而将不必要的逻辑添加到您的模板中......” –
它在控制器中....再次检查html,除非我不明白你的意思? – user3737396
我只是指:ng-init =“setActiveLocation({{defaultLocation}})”。如果您在控制器中调用了setActiveLocation,则可以确保侦听器之前已经设置好。 顺便说一句:它应该可能是setActiveLocation(defaultLocation)而不是setActiveLocation({{defaultLocation}}),如果你想保留在ng-init中。 –