所有angularjs子控制器初始化后如何运行代码?

时间:2013-12-12 08:56:22

标签: angularjs

子控制器可以使用$scope.$emit向父控制器发送值(或直接访问父控制器的范围),但我们怎样才能知道所有孩子何时在场?

http://jsfiddle.net/37uL4/

1 个答案:

答案 0 :(得分:1)

可以通过承诺完成。您必须为每个预期的控制器创建一个承诺,在收到相应的消息时解决它,并在$q.all()上触发您的操作:

app.controller('MainCtrl', ['$scope', '$q', function($scope, $q){
    $scope.messages = [];
    var defs = {
        foo: $q.defer(),
        bar: $q.defer()
    };
    $scope.$on('message', function(e, value) {
        $scope.messages.push(value);
        defs[value].resolve();
    });
    $q.all([defs.foo.promise, defs.bar.promise]).then(function() {
        alert('Count: ' + $scope.messages.length); // should not alert until we have all messages!
        defs = null;
    });
}]);

分叉小提琴:http://jsfiddle.net/GtGB7/1/