Define and resolve promises before running controller code in AngularJS
Putting $http promise into a service and then resolve it is recommended as it will load json sooner.
http://jsfiddle.net/gh/gist/library/pure/abb04b575636f820d1a3/
Define and resolve promises before running controller code in AngularJS
Putting $http promise into a service and then resolve it is recommended as it will load json sooner.
http://jsfiddle.net/gh/gist/library/pure/abb04b575636f820d1a3/
| <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.3.16/angular.js"></script> | |
| <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.3.16/angular-route.js"></script> | |
| <div ng-app="myapp"> | |
| <script type="text/ng-template" id="/tpl.html"> | |
| Hello {{test}} | |
| </script> | |
| <div ng-view></div> | |
| </div> |
| var app = angular.module('myapp', ['ngRoute']) | |
| .config(function ($routeProvider) { | |
| $routeProvider. | |
| when('/', { | |
| templateUrl: '/tpl.html', | |
| controller: 'DomReadyCtrl', | |
| resolve: { | |
| 'jsonFromResolve': ['$http', function ($http) { | |
| return $http.get('https://raw.githubusercontent.com/levonlee/jsSandbox/master/sample1.json') | |
| .success(function (data) { | |
| console.log('jsonFromResolve is loaded successfully'); | |
| return data; | |
| }) | |
| .error(function (data, status, headers, config) { | |
| console.log('json failed to load'); | |
| return config; | |
| }); | |
| }], | |
| 'json1FromService': function (jsonService) { | |
| return jsonService.getJson1() | |
| .then(function (response) { | |
| console.log('json1FromService in resolve is called'); | |
| return response.data; | |
| }); | |
| } | |
| } | |
| }); | |
| }) | |
| .factory('jsonService', function($http) { | |
| return { | |
| getJson1: function() { | |
| console.log('json1 from service is loaded successfully'); | |
| return $http.get('https://raw.githubusercontent.com/levonlee/jsSandbox/master/sample1.json'); | |
| }, | |
| getJson2: function() { | |
| // only getJson1 will be called as the controller only requires getJson1 | |
| console.log('json2 from service is loaded successfully'); | |
| return $http.get('https://raw.githubusercontent.com/levonlee/jsSandbox/master/sample2.json'); | |
| } | |
| } | |
| }) | |
| .factory('dataService', function($q, jsonService) { | |
| var deferred = $q.defer(); | |
| var msg = ''; | |
| if (msg) { | |
| deferred.resolve(msg); | |
| } else { | |
| deferred.resolve(jsonService.getJson2().then(function(response) { | |
| console.log('Call jsonService in dataService'); | |
| return(response.data); | |
| })); | |
| } | |
| return deferred.promise; | |
| }) | |
| .controller('DomReadyCtrl', ['$scope', 'jsonFromResolve','json1FromService', 'jsonService' | |
| function ($scope, jsonFromResolve, json1FromService, jsonService) { | |
| console.log('first line in ng'); | |
| var tempJson = jsonFromResolve.data; | |
| var tempJsonFromService = json1FromService; | |
| $scope.test = tempJson.listings[0].id; | |
| $scope.test = tempJson.listings[1].id; | |
| jsonService.getJson2().then(function(response) { | |
| console.log('Call jsonService from controller'); | |
| console.log(response.data); | |
| }); | |
| console.log('Last line in ng'); | |
| } | |
| ]); |
| normalize_css: no | |
| panel_jss: 0 | |
| panel_css: 0 | |
| wrap: b |