$ scope。$ on&控制器负载时间/速度

时间:2016-02-06 00:03:52

标签: javascript angularjs events

我很好奇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?或者时间如何在这里工作?

0 个答案:

没有答案