我有一个加载文件的服务,然后使用控制器来更新视图 如果我使用this.loadListAsync然后广播是无用的,因为控制器还不存在,另一方面,如果我使用$ emit方法它很好,我觉得我在这里遗漏了一些东西,$ emit不是为了这个目的< / p>
var mod= angular.module('mod1', []);
mod.service('modModel', ['$rootScope',function ($rootScope) {
// here is how i know the controller finished initialization
$rootScope.$on('modController', function(ev, data){
data.loadListAsync();
})
this.loadListAsync = function(){
$.ajax({
url:'mainapp/dashboardList.js',
type:'GET',
cache:false,
dataType: "script",
success :this.broadcast
})
}
this.broadcast= function(){
this.list = list; // list is loaded from the async call
$rootScope.$broadcast('modModel::list', list);
}
// this.loadListAsync(); // this line is not working because the controller is not initialized yet
}]);
mod.controller('filtersController', ['$scope', 'sharedData', 'angularLoad','modModel', function ($scope, sharedData, angularLoad, modModel) {
$scope.$on(''modModel::list', function(event, list) {
$scope.list = list;
doThings();
});
$scope.$emit('modController',modModel)
})
答案 0 :(得分:0)
您有多种选择,一种是$ emit方法。您可以通过传递唯一的事件名称(例如&#34; loaded ::&#34;)进一步优化它,以确保您获得正确的通知。并在收到通知时注册处理程序。 $ on提供取消注册函数作为$ on的返回值。在此处angular doc for $on
查看$的返回值但为什么不简单地传递一个回调函数。你可以包括一个&#34;这个&#34;上下文然后在xyz.call(this_var, ... callback params)
内的this.broadcast
中调用?