2015-05-25 4 views
1

Я пытаюсь получить данные из URL в мой code.I делает это в Service.js Вот мой коддоступа значение вне функции

var demoService = angular.module('demoService', []) 
.service('myService', function($http, $q) { 

var v=0; 

this.getdata = function() { 
     $http.get('myurl').then(function(data) { 
     v = data.data.Tweets[0].FAVOURITE_COUNT; 

     }); 
     return v; // how to return v from here(doesn't return the function's v) 
    } 
}) 

Я хочу использовать это в моем контроллере AngularJS позвонив по телефону службы:

myService.getdata()//the v = data.data.Tweets[0].FAVOURITE_COUNT needed here 

Но проблема в том, что функция возвращает 0 (V, определенный снаружи) вместо значения, что я заселить его! Есть ли способ, которым я мог бы просто обработать объект, возвращенный из URL-адреса, и передать одно значение и вернуть его?

Спасибо заранее!

+1

вы возвращаете значение 'v' перед его обработкой ** асинхронным **' $ http.get() ' звоните, поэтому вы получаете результат '0'. – BeNdErR

+0

@ benderr: Не могли бы вы поделиться некоторыми предложениями о том, как разрешить этот тип ошибок? – Vineet

+0

'this.getData = function() {return $ http.get ('myurl'); } ', а затем' myService.getData(). then (function (data) {...}); ' –

ответ

0

Использование Ajax вызова

Сервис:

var demoService = angular.module('demoService', []) 
.service('myService',['$http', function($http) { 

    this.getdata = function(entity){ 
     var promise = $http({ 
      method : 'POST', 
      url : 'services/entity/add', 
      data : entity, 
      headers : { 
       'Content-Type' : 'application/json' 
      }, 
      cache : false 
     }).then(function (response) { 
      return response; 
     }); 
     return promise;  
    }; 
}]); 

Controlle г:

var demoService = angular.module('demoService', []) 
.controller('myctr',['$scope','myService',function($scope,myService){ 
    myService.getdata().then(function(response){ 
      //Success 

     },function(response){ 

      //Error   
     }); 

}]); 

0

$ http.get метод возвращает обещание. Это означает, что после того, как вы вернули его, данные устанавливаются в переменную «v». Таким образом, вы должны получать данные только после того, как обещание будет разрешено. Например .:

angular.module('demoService', []) 
    .service('myService', function($http, $q) { 
    var data = null; 
    this.fetchData = function() { 
     $http.get('myurl').then(function(data) { 
      data = data.data.Tweets[0].FAVOURITE_COUNT; 
     }); 
    } 
    this.fetchDataNoSave = function() { 
     return $http.get('myurl'); 
    } 
    this.getData = function() { 
     return data; 
    } 
}) 

angular.module('demoService').controller('ViewCtrl', function(demoService, $scope) { 
    demoService.fetchDataNoSave().then(function(data) { 
     $scope.v = data.data.Tweets[0].FAVOURITE_COUNT; 
    }) 
    // OR 
    demoService.fetchData().then(function() { 
     $scope.v = demoService.getData(); 
    }) 
}) 

Различия в этих вариантах, что первый не спасет состояние на службе, и вы будете должны получить это состояние каждый раз. Второй управляет состоянием в сервисе, что означает, что каждый контроллер с введенной услугой будет иметь доступ к извлеченным данным

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