AngularJs - 如何知道控制器是否完成初始化

时间:2014-11-02 19:04:21

标签: javascript angularjs

我有一个加载文件的服务,然后使用控制器来更新视图 如果我使用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)
})

1 个答案:

答案 0 :(得分:0)

您有多种选择,一种是$ emit方法。您可以通过传递唯一的事件名称(例如&#34; loaded ::&#34;)进一步优化它,以确保您获得正确的通知。并在收到通知时注册处理程序。 $ on提供取消注册函数作为$ on的返回值。在此处angular doc for $on

查看$的返回值

但为什么不简单地传递一个回调函数。你可以包括一个&#34;这个&#34;上下文然后在xyz.call(this_var, ... callback params)内的this.broadcast中调用?