工厂方法HTTP不起作用

时间:2016-08-05 17:35:18

标签: javascript angularjs json

我无法从我的工厂jsonLanguage收到此json电话。

我的代码:

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而没有运气。

3 个答案:

答案 0 :(得分: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;
    });
    

答案 1 :(得分:2)

您需要致电jsonLanguage.get().then(/**insert callback fn here*/)才能拨打该服务。

为了使其正常工作,您需要在get函数中返回promise。

get: function(theLanguage){
    return $http.get(url);
}

答案 2 :(得分:1)

返回$http承诺,以便您稍后使用then解决此问题。

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

现在您可以像jsonLanguage.get().then()

一样使用它