var app = angular.module("app",['ui.router']);
app.config(function($stateProvider,$urlRouterProvider){
$urlRouterProvider.otherwise('/');
$stateProvider
.state('page1',{
url:'/pg1',
templateUrl:'page1.html',
controller:'ctrlpg1',
resolve:{
greeting:function($q, $timeout){
var deferred = $q.defer();
$timeout(function(){
deferred.resolve('promise');
},2000);
return deferred.promise;
},
}
})
.state('page2',{
url:'/pg2',
templateUrl:'page2.html',
controller:'ctrlpg2',
resolve:{
simpleObj:function(){
return{value:'simple'}
}
}
})
})
app.controller('ctrlmain',function($scope){
$scope.showSpinner = false;
$scope.$on('$stateChangeStart', function (event, toState, toParams, fromState, fromParams) {
if (toState.resolve) {
$scope.showSpinner =true;
}
});
$scope.$on('$stateChangeSuccess', function (event, toState, toParams, fromState, fromParams) {
if (toState.resolve) {
$scope.showSpinner = false;
}
});
})
app.controller('ctrlpg1',function($scope,greeting){
$scope.kk = greeting;
})
app.controller('ctrlpg2',function($scope,simpleObj){
$scope.kk = simpleObj.value;
})
<div ng-app="app" ng-controller="ctrlmain">
<span ng-show="showSpinner">Loading...</span>
<br>
<a href="#/pg1">pg1</a>
<a href="#/pg2">pg2</a>
<br><br>
<ui-view></ui-view>
<script type="text/ng-template" id="page1.html">
{{kk}}
</script>
<script type="text/ng-template" id="page2.html">
{{kk}}
</script>
</div>
External resources loaded into this fiddle: