2012-11-09 32 views
9

Tôi chỉ đang học angularJS (sử dụng hạt giống góc) và tôi cần tải cấu hình trang web của mình từ nguồn cấp dữ liệu JSON trước khi phần còn lại của trang web tải.AngularJS: Làm thế nào để tải nguồn cấp dữ liệu json trước khi tải ứng dụng?

Thật không may, sử dụng $ http hoặc $ tài nguyên không trả lại nguồn cấp dữ liệu kịp thời cho phần còn lại của ứng dụng để tải.

Cách chính xác để buộc ứng dụng tải dữ liệu này trước phần còn lại của ứng dụng là gì?

Trả lời

5

Bạn phải sử dụng phương thức Controller.resolve. Kiểm tra câu trả lời của Misko (một trong những nhà phát triển cốt lõi của Angular) https://stackoverflow.com/a/11972028/726711

+0

Cảm ơn, tôi đã tạo bộ điều khiển cấu hình trang web I và sử dụng giải quyết để bao gồm nó trên tất cả các trình điều khiển khác cần thiết. Tất cả đều làm việc, nhưng tôi cảm thấy có thể có một cách làm tốt hơn. – Bunkered

+5

Điều gì xảy ra nếu Bộ điều khiển không được gắn vào tuyến đường? –

0

Sử dụng phương pháp phân giải đã phá vỡ tất cả các thử nghiệm đơn vị của tôi ... Tôi đã đi theo cách này, nơi cài đặt là một dịch vụ.

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

Sau đó, tôi kiểm tra xem chúng tôi đã tải cài đặt để đảm bảo chúng tôi không yêu cầu nhiều lần.

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; 
      } 
} 
Các vấn đề liên quan