Заводской метод HTTP не работает

Я не могу получить этот вызов JSON с моей фабрики jsonLanguage,

Мой код:

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 ответа

Решение

Здесь вы пропустили пару вещей:

  1. Вернуть $http обещание от обслуживания get method

    get: function(theLanguage){
        return $http.get(url);
    }
    
  2. Call фабрика get method и получить данные в своем обещании успеха, поставив .then над этим вызовом метода.

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

Вам нужно позвонить jsonLanguage.get().then(/**insert callback fn here*/) для того, чтобы позвонить в сервис.

И чтобы это работало, вам нужно вернуть обещание в вашей функции get.

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

Вернуть $http обещание, так что вы можете решить это позже, используя then,

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

Теперь вы можете использовать его как jsonLanguage.get().then()

Другие вопросы по тегам