【问题标题】:AngularJS: How to load json feed before app load?AngularJS:如何在应用程序加载之前加载 json 提要?
【发布时间】:2012-10-29 18:41:56
【问题描述】:

我只是在学习 angularJS(使用 angular-seed),我需要在加载网站的其余部分之前从 JSON 提要加载我的网站配置。

很遗憾,使用 $http 或 $resource 无法及时返回提要以供应用的其余部分加载。

强制应用在应用其他部分之前加载此数据的正确方法是什么?

【问题讨论】:

    标签: json angularjs


    【解决方案1】:

    您必须使用 Controller.resolve 方法。查看 Misko(核心 Angular 开发人员之一)的回答 https://stackoverflow.com/a/11972028/726711

    【讨论】:

    • 谢谢,我创建了站点配置控制器并使用 resolve 将它包含在所有其他需要它的控制器上。一切正常,但我觉得可能有更好的方法。
    • 如果Controller没有附加到路由上怎么办?
    【解决方案2】:

    使用 resolve 方法破坏了我所有的单元测试...我采用这种方式,其中设置是一项服务。

    $q.when(settings.loadConfig()).then(function () {
      console.log( settings.versionedApiUrl );  
    });
    

    然后,我检查我们是否已经加载了设置,以确保我们不会多次请求。

    class settings {
        loadConfig = ( ):angular.IPromise<any> =>  {
    
                    var deferred = this.q.defer();
    
                    if( this.settingsLoaded  ){
                          deferred.resolve({})
                          return deferred.promise;
                    }
    
                    this.http({
                          url:'config.json'
                    }).then((result) => {
    
                          if( result.data ){
                                this.versionedApiUrl = result.data.versionedApiUrl;
                                this.apiServer = result.data.apiServer;
                                this.widgetServiceRoot = result.data.widgetServiceRoot;
                                this.settingsLoaded = true;
                          }
    
                          deferred.resolve({});
                    });
                    return deferred.promise;
              }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-10-18
      • 1970-01-01
      • 2014-05-16
      • 1970-01-01
      相关资源
      最近更新 更多