2017-01-12 12 views
0

1つのjsonファイルからURLを読み込み、そのURLを実行するための$ http GETリクエストを持つ他のjavascriptファイルにURLを送りたいとします。私は1つのサービス を別のサービスファイルで使用してデータを取得しています。私はそれを実行するとき、それはバナーのの機能で定義されていません。

ファイル:

(function() { 
    angular.module('siteModule') 
    .service('loggerService', function ($http, $q) 
    { var rox; 
     var deffered = $q.defer(); 
     $http.get('/config/config.json').then(function (data) 
     { 
       deffered.resolve(data); 
     }); 

     this.getPlayers = function() 
      { 
       return deffered.promise; 
      } 
    }) 
})(); 

ファイルcommon.js:siteService.js

(function() { 
    var confUrl; 
    angular.module('siteModule') 
    .service('siteService', function ($http, $q, loggerService) 
    { 

     loggerService.getPlayers().then(function (data) { 
      confUrl = data.data.baseUrl+data.data.urls.site; 
      console.log("GOTURL",confUrl); 

     }); 

     this.bannerSlides = function(){ 
       console.log("URL NOT GET",confUrl); 
      return $http({ 
       method: "GET", 
       dataType: "json", 
       url: confUrl 
      }).then(function (response) { 
       // inspect/modify the received data and pass it onward 
       return response.data; 
      }, function (error) { 
// inspect/modify the data and throw a new error or return data 
       throw error; 
      }); 
     } 
    }) 

})(); 
+0

HTMLの必要はここにありませんが、ただ、どれだけ我々解決しようとすると、ダミーのHTMLのスクリプトタグでjsのコードを実行しますbannerslides関数のconfUrlを getplayers関数から取得できます。 – Creator

答えて

1

をすべて$http呼び出しは非同期であるため、これがあります。約束を守る必要があります。最初にjsonからURLを取得してから、それを呼び出します。別名loggerService.getPlayers()this.bannerSlides機能に移動します。

これまでに、あなたのロガーサービスにはなぜ$qが必要ですか? $http自体はすでに約束しています。

common.js:

(function() { 
    angular.module('siteModule') 
    .service('loggerService', function($http) { 
     this.getPlayers = function() { 
     return $http.get('/config/config.json') 
     } 
    }) 
})(); 

siteService.js:

(function() { 
    var confUrl; 
    angular.module('siteModule') 
    .service('siteService', function($http, $q, loggerService) { 
     this.bannerSlides = function() { 
     loggerService.getPlayers().then(function(data) { 
      confUrl = data.data.baseUrl + data.data.urls.site; 
      console.log("GOTURL", confUrl); 
      //move your return statement here 
      return $http({ 
      method: "GET", 
      dataType: "json", 
      url: confUrl 
      }) 
     }); 
     } 
    }) 
})(); 
+0

angular.js:14324エラー:[$ http:badreq] HTTPリクエストのコンフィグレーションurlは、文字列または$ sceの信頼できるオブジェクトである必要があります。受信:未定義 エラーを表示しています。まだ未定義になっています – Creator

+0

私の答えを編集しました。 1つ1つを確認する - あなたのロガーサービスは、あなたが望むURLを返すのですか? – CozyAzure

+0

はい、文字列urlを使用すると、うまく動作します。 – Creator

関連する問題