javascript - AngularJS: Performing $http request inside custom service and returning data -


i have defined custom http service in angular looks this:

angular.module('myapp')   .factory('myhttpserv', function ($http) {    var url = "http://my.ip.address/"    var http = {       async: function (webservice) {           var promise = $http.get(url + webservice, { cache: true }).then(function (response) {             return response.data;         });           return promise;        }   };   return http; }); 

and can access service in controller so:

angular.module('myapp')   .controller('myctrl', function (myhttpserv) {    var webservice = 'getuser?u=3'    myhttpserv.async(webservice).then(function (data) {       console.log(data);   })  }); 

however need streamline process contained inside service static url , returns data. can call in controller so:

 angular.module('myapp')   .controller('myctrl', function ($scope, myhttpserv) {        console.log(myhttpserv.var1);       console.log(myhttpserv.var2);       etc...  }); 

i can't seem tweak service functionality. know correct way it?

option 1 - use promise api

angular.module('myapp').factory('myhttpserv', function ($http) {   return $http.get('http://my.ip.address/getuser?u=3', { cache: true }); }); 

controller:

angular.module('myapp').controller('myctrl', function ($scope, myhttpserv) {      myhttpserv.then(function(response){          console.log(response.data);      });      }); 

option 2 - using route resolve

angular.module('myapp', ['ngroute']).config(['$routeprovider',   function($routeprovider) {     $routeprovider.       when('/myctrl', {         templateurl: 'myview.html',         controller: 'myctrl',         resolve: {         load: function (myhttpserv) {             return myhttpserv;         }       });   }]); 

service:

angular.module('myapp').factory('myhttpserv', function ($http) {       var data = {};       var url = "http://my.ip.address/";       var promise = $http.get(url + 'getuser?u=3', { cache: true }).then(function (response) {                 data = response.data;             });       return data;     }); 

controller:

 angular.module('myapp')   .controller('myctrl', function ($scope, myhttpserv) {        console.log(myhttpserv.data.var1);       console.log(myhttpserv.data.var1);       etc...  }); 

option 3 - use $interval service

angular.module('myapp').factory('myhttpserv', function ($http) {   var data = {};   var url = "http://my.ip.address/";   var promise = $http.get(url + 'getuser?u=3', { cache: true }).then(function (response) {             data = response.data;         });   return data; }); 

controller:

angular.module('myapp').controller('myctrl', function ($scope, $interval, myhttpserv) {       $scope.intervalpromise = $interval(function(){           if (object.keys(myhttpserv.data).length!=0)           {               console.log(myhttpserv.data);               $interval.cancel($scope.intervalpromise);           }       }, 100);     }); 

Comments

Popular posts from this blog

database - VFP Grid + SQL server 2008 - grid not showing correctly -

jquery - Set jPicker field to empty value -

.htaccess - htaccess convert request to clean url and add slash at the end of the url -