子控制器可以使用$scope.$emit
向父控制器发送值(或直接访问父控制器的范围),但我们怎样才能知道所有孩子何时在场?
答案 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;
});
}]);