我很好奇Angular控制器的加载时间与这些控制器中的$ scope / event listeners之间的关系。 有人可以提供文档或解释其工作原理吗?
我已经找了一会儿,但却找不到明确的答案。
我有这个例子,我从数据库加载过滤器选项,$ emit到父控制器,然后$发生这种情况时向其他控制器广播一个事件。 (代码缩写)
FilterController.js
app.controller("FilterController", ["$scope", "$q", function($scope, $q) {
(function getInitialFilters() {
$q.all([
// Few promises that call the database for information and sets filters
]).then(function(){
// After all the promises finish, $emit event to parent controller,
// AppController
$scope.$emit("heyAppControllerFiltersHaveLoaded")
})
}();
}])
AppController.js(FilterController和DashboardController的父控制器)
app.controller("AppController", ["$scope", function($scope) {
$scope.$on("heyAppControllerFiltersHaveLoaded", function() {
$scope.$broadcast("allChildControllersFiltersHaveLoaded");
console.log('broadcast sent');
});
}]);
问题是,当$ broadcast发生时,子控制器中的$ scope。$ on / event侦听器错过了它,即使看起来控制器已加载并且$ emit和$ broadcast发生在最长的往返之后数据库完成。 (当然,这不是一趟旅程)
DashboardController.js
app.controller("DashboardController", ["$scope", function($scope) {
console.log('DashboardController loaded');
$scope.$on("allChildControllersFiltersHaveLoaded", function() {
console.log('listener listened');
doSomeStuffWithFilters();
});
}]);
控制台按以下顺序打印出来:
"已加载DashboardController"
"广播发送"
我在这里找到的快速修复解决方案是在$ broadcast中添加500毫秒超时,然后DashboardController捕获事件。
我的问题是,控制器是否加载,然后需要一段时间来添加$ scope。$ on / event listener?甚至比在数据库中短途往返更长,而不是在其他控制器中注册$ emit和$ broadcast?或者时间如何在这里工作?