Friday, May 10, 2024
 Popular · Latest · Hot · Upcoming
41
rated 0 times [  46] [ 5]  / answers: 1 / hits: 6476  / 9 Years ago, thu, june 11, 2015, 12:00:00

I'm working on a mobile app using AngularJS as a framework, currently I have a structure similar to this:



app.config(['$routeProvider', function($routeProvider) {
$routeProvider
.when('/', {
templateUrl : 'pages/home.html',
controller : 'homeCtrl'
})

.when('/one', {
templateUrl : 'pages/one.html',
controller : 'oneCtrl'
})

.when('/two', {
templateUrl : 'pages/two.html',
controller : 'twoCtrl'
});
}]);

app.controller('homeCtrl', ['$scope', function($scope) {

}]);

app.controller('oneCtrl', ['$scope', function($scope) {

}]);

app.controller('twoCtrl', ['$scope', function($scope) {

}]);


And then I'm displaying the content with an ng-view:



<div class=ng-view></div>


Things are working well but I need to load data from a JSON file to populate all the content of the app. What I want is to make and an AJAX call only once and then pass the data through all my different controllers. In my first attempt, I thought to create a Service with an $http.get() inside of it and include that in every controller, but it does not work because it makes a different ajax request everytime I inject and use the service. Since I'm new using angular I'm wondering what is the best way or the more angular way to achieve this without messing it up.



Edit: I'm adding the code of the service, which is just a simple $http.get request:



app.service('Data', ['$http', function($http) {
this.get = function() {
$http.get('data.json')
.success(function(result) {
return result;
})
}
});

More From » angularjs

 Answers
3

Try this to get JSON Data from a GET Link:



(function (app) {
'use strict';

app.factory('myService', MyService);

MyService.$inject = ['$q', '$http'];

function MyService($q, $http) {
var data;

var service = {
getData: getData
};

return service;

//////////////////////////////////////

function getData(refresh) {
if (refresh || !data) {
return $http.get('your_source').then(function(data){
this.data = data;
return data;
})
}
else {
var deferrer = $q.defer();
deferrer.resolve(data);
return deferrer.promise;
}
}
}

}(angular.module('app')));


Now you can add this dependency in your controller file and use:



myService.getData().then(function(data){
//use data here
}, function(err){
//Handle error here
});

[#36420] Wednesday, June 10, 2015, 9 Years  [reply] [flag answer]
Only authorized users can answer the question. Please sign in first, or register a free account.
ronans

Total Points: 460
Total Questions: 109
Total Answers: 108

Location: Slovenia
Member since Sat, Sep 11, 2021
3 Years ago
;