2016-08-05 18 views
1

私の工場からこのjson呼び出しを受け取ることができませんjsonLanguageファクトリメソッドHTTPが動作しない

マイコード:

var App = angular.module('App', []); 
var theLanguage = 'english'; 
App.factory('jsonLanguage', function($http){ 
    var theLanguage = 'english'; 
    return { 

     get: function(theLanguage){ 
      var url = theLanguage + '.json'; 
      $http.get(url); 
     } 
    } 

}); 
App.controller('mainController', function($scope, $http, $log, jsonLanguage) { 

    //$http.get(theLanguage + '.json') 

     jsonLanguage.success(function(res){ //here is the problem I tried .then and tried res.data no luck :(
      $scope.language = res; 
$log.debug($scope.language); 


     }); 
$log.debug($scope.language); 
angular.forEach($scope.letter, function(single) { 
     $log.log("hello worldsss"); 
$log.log(single); 
    }); 
}); 

App.controller('intervalController', function($scope, $log) { 
    this.$log = $log; 
    //var name = $scope.single; 
    angular.forEach($scope.letter, function(single) { 
     $log.log("hello worldsss"); 
$log.log(single); 
    }); 
    //$log.log(name); 
    $log.log('Hello World!'); 

}); 

App.controller('clickController', function($scope) { 

}); 

私はjsonLanguageを試みたが、当時と運でres.dataを試してみました。

+0

エラーのようにそれを使用することができますがTypeError例外です:jsonLanguage.successはあなたがオブジェクトをしたい場合にすることができます...私はあなたがプロバイダを定義したいかもしれないと思う機能 –

+1

ではありません角度を使用する前にconfigブロックのいくつかのプロパティを変更してから、プロバイダが意味をなさないようにします。 – shaunhusain

+0

@shaunhusainありがとうございますshaunどうすればいいのですか? –

答えて

3

ここでは、物事のカップルを逃した:

  1. 戻り$http約束サービスからget method

    get: function(theLanguage){ 
        return $http.get(url); 
    } 
    
  2. コール工場get method &は、そのメソッド呼び出し上.thenを置くことによって、その約束の成功内のデータを取得します。

    jsonLanguage.get($scope.language).then(function(res){ 
        $scope.language = res.data; 
    }); 
    
+0

なぜ、get scopeメソッドに$ scope.langugeを置く必要があるのですか?$ scope.theLanguage –

+0

@AaronRabinowitzあなたの中に 'language' $ scope変数が見つかりました。コントローラなので、私はそれを追加しました。変数名が 'theLanguage'ならばそれを渡します。 –

2

あなたは、サービスを呼び出すためにjsonLanguage.get().then(/**insert callback fn here*/)を呼び出す必要があります。

そして、それが機能するには、get関数で約束を返す必要があります。あなたがthenを使用して、後でそれを解決できるように

get: function(theLanguage){ 
    return $http.get(url); 
} 
1
は、 $http約束を返し

return { 
    get: function(theLanguage) { 
    var url = theLanguage + '.json'; 
    return $http.get(url); 
    } 
} 

今、あなたはjsonLanguage.get().then()

関連する問題