如何在angularjs中启动全局数据

时间:2015-02-09 03:05:32

标签: angularjs

在我的应用中,许多视图或控制器都会使用一些数据。你可以认为它们是一些数据字典,比如状态图定义。

现在我的解决方案是将它们放入AppContoller,并将它们放入$ scope或$ rootScope。 (AppController中的$ scope是所有控制器的父作用域,因此可以在所有控制器中访问数据。)

但问题是,它将以异步方式启动$ resource,因此可能还没有准备好使用它们。因为所有数据都将通过$ resource获得。有时在必要的全局数据之前获取其他数据。

现在在使用全局数据的控制器中,我必须检查全局数据,如果它还没有准备好,稍后用超时调用初始化函数。

所以,我的问题是,是否有更好的解决方案来初始化所有应用程序使用的必要数据?

1 个答案:

答案 0 :(得分:2)

好吧,据我了解你的问题,你需要确保当你的应用程序启动时,你从服务器获取了一些可以在整个应用程序中全局使用的数据。

我的建议是采用以下方法,

  1. 创建一个服务来保存您的全局数据。

    var app = angular.module('myApp', []);
    
    app.service('constantService', function() {
    
        // All your constants declared here.
    
    
    });
    
  2. 现在在app.run方法中,进行ajax调用或任何你想做的事情,并初始化服务中的所有常量。

    app.run(function($rootScope, $http, constantService) {
    
        /*
    
            Make an ajax call here and fetch all the Constants from your server.
    
    
            var request = {};
            request.method = 'POST';
            request.data = {};
            request.url = url;
    
            var promise = $http(request);
            var service = this;
    
            promise.success(function(data, status, header, config) {
                if (showLoader === true || showLoader === undefined) {
                    service.hideModal();
                }
                successCallback(data);
            });
    
            promise.error(function(data, status, header, config) {
    
            });
    
    
        */
    
    });
    
  3. 您可以在加载这些常量时显示加载消息,以避免用户在通话期间进行干预。