2016-08-05 2 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

Я думаю, вы можете определить провайдера ... если вы хотите объект, который вы можете измените некоторые свойства в блоке конфигурации, прежде чем угловые начнут использовать его, тогда провайдер имеет смысл. – 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

Почему мне нужно помещать $ scope.languge в 'метод get', вы, должно быть, имели в виду $ scope.theLanguage –

+0

@AaronRabinowitz Я нашел переменную переменной' language' $ внутри вашей контроллер, поэтому я добавил это. Если имя переменной «theLanguage», то передайте это. –

2

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

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

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

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

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

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

Смежные вопросы