3

HTTP リクエストの結果であるタグに応じて module.constant を設定したい。

以下は私のプロジェクトのデモ コードです。

code in app.js

(function(){
     var myApp = angular.module('myApp',['ui.router','ui.bootstrap']);

     myApp.contant("API_URL","https://www.helloworld.com/API");

     myApp.run(function($rootScope.$http){
     some code;
     });  
})();

このような HTTP リクエストの結果に応じて、特別な Id を構成したいと考えています。

$http.get(API_URL + "/configTag")
  .then(function success(response){
      var tag = response.data.tag;
      if(tag === 0) {
      myApp.constant("specialID","111111111");
      } else if (tag === 1) {
      myApp.constant("specialID","222222222");
      } else {
      myApp.constant("specialID","333333333");
      }  
  },function error(response){

  }); 

しかし、私はフロントエンドとAngularJSが初めてです。私はこれを実現する方法がわかりませんか?

4

2 に答える 2

2

簡単な回答: この$httpサービスを使用して Angular 定数を作成することはできません。

AngularJS フレームワークは、「構成」フェーズと「実行」フェーズの 2 つのフェーズで動作します。「実行」フェーズが開始されると、プロバイダーを構成できなくなり、定数を追加できなくなります。$httpサービス操作は「実行」フェーズでのみ実行できます。

ただし、サービス プロバイダーは定数の約束を提供できます。

app.factory("specialIDpromise", function(API_URL, $http) {
    var promise = $http.get(API_URL + "/configTag")
        .then(function success(response){
            var tag = response.data.tag;
            if(tag === 0) {
                //return to chain data
                return "111111111";
            } else if (tag === 1) {
                return "222222222";
            } else {
                return "333333333";
            };  
        }).catch(function error(response){
            //return converts rejection to success
            return "something";
        });
   //return promise to factory
   return promise;
});

コントローラーで使用するには:

app.controller("myCtrl", function(specialIDpromise) {
    specialIDpromise.then(function(specialID) {
        console.log(specialID);
        //Do other things that depend on specialID
   });
});

フェーズ内のすべての操作はconfig同期する必要があります (定数の追加を含む)。サービスによる XHR などの非同期操作は、AngularJS アプリ$httpのフェーズで発生します。run

于 2016-11-02T15:01:16.320 に答える