仅在完成服务后执行和加载控制器

时间:2014-04-07 05:16:34

标签: javascript angularjs

我创建了一个应用程序角度js,其中我在一个页面中有很多控制器,如下所示

app.controller('Controller1', function($rootScope, $scope)
{
    :
    :
});

app.controller('Controller2', function($rootScope, $scope)
{
    :
    :
});

app.controller('Controller3', function($rootScope, $scope)
{
    :
    :
});

我有一项服务从其他服务获取用户属性。该应用程序工作正常,但问题是从服务中获取所有控制器执行数据之前

任何人都可以告诉我如何在完成加载用户属性的服务完成后加载所有控制器,服务如下:

app.factory('userConfig', function($rootScope, appConfig, UserConfig)
{
    $rootScope.userConfig = UserConfig.get(function(data)
    {
        $rootScope.userConfig = _.clone(data.userproperties, true);
        :
        :
    });
});

我的脚本在下面给出

var app = angular.module('app',[ 'commonServices']);

app.factory('userConfig', function($rootScope, appConfig, UserConfig)
{
    $rootScope.userConfig = UserConfig.get(function(data)
    {
        $rootScope.userConfig = _.clone(data.userproperties, true);
        :
        :
    });
});

app.controller('Controller1', function($rootScope, $scope)
{
    :
    :
});

app.controller('Controller2', function($rootScope, $scope)
{
    :
    :
});

app.controller('Controller3', function($rootScope, $scope)
{
    :
    :
});

1 个答案:

答案 0 :(得分:1)

您可以将使用这些控制器的代码置于ng之后 - 如果仅在某些承诺得到解决时才启用。

工厂:

app.factory('userConfig', function($rootScope, appConfig, UserConfig) {
    UserConfig.get(function(data) {
      $rootScope.userConfig = _.clone(data.userproperties, true);
    });
});

模板:

<div ng-if="userConfig">
   <div ng-controller="Controller1">foo1</div>
   <div ng-controller="Controller2">foo2</div>
   <div ng-controller="Controller3">foo3</div>
</div>

或者,您可以使用ui-router'resolve'属性:https://github.com/angular-ui/ui-router/wiki#resolve