您的问题的答案是否定的。请参阅以下 plunkr 以供参考:http://plnkr.co/edit/6xRCYOGsjBk1Wlrdeliz?p=preview.
如您所见,plunkr 显示了模仿其他人以及控制器建议的解决方案中的长时间操作的示例。我们可以看到,如果我们使用resolves,视图仍然会加载相同的数量,但是直到所有事情都解决后才会渲染子视图。如果我们改为从控制器进行调用,我们可以看到顺序无关紧要,因为每个视图都已经加载,并且调用之后由每个控制器处理。
代码:
<!DOCTYPE html>
<html ng-app="app">
<head>
<script data-require="angular.js@1.4.3" data-semver="1.4.3" src="https://code.angularjs.org/1.4.3/angular.js"></script>
<script data-require="ui-router@0.2.15" data-semver="0.2.15" src="//rawgit.com/angular-ui/ui-router/0.2.15/release/angular-ui-router.js"></script>
<link rel="stylesheet" href="style.css" />
<script src="script.js"></script>
</head>
<body>
<h4>First View</h4>
<div ui-view="first"></div>
<h4>Second View</h4>
<div ui-view="second"></div>
<h4>Third View</h4>
<div ui-view="third"></div>
<h4>Fourth View</h4>
<div ui-view="fourth"></div>
<h4>Fifth View</h4>
<div ui-view="fifth"></div>
</body>
</html>
// Code goes here
angular.module('app', ['ui.router'])
.config(function($urlRouterProvider, $stateProvider) {
$stateProvider
.state('app', {
url:'/',
// templateUrl: 'layout.html',
views: {
'first': {
template: '<div>{{text}}</div>',
controller: 'theWaitCtrl',
resolve: {
'msg': function($q, $timeout, RandomNumberService) {
var deferred = $q.defer();
var waitDuration = RandomNumberService.getRandomNumber();
$timeout(function() {
deferred.resolve('View resolved after ' + waitDuration + ' milliseconds');
}, waitDuration);
return deferred.promise;
}
}
},
'second': {
template: '<div>{{text}}</div>',
controller: 'theCtrl'
},
'third': {
template: '<div>{{text}}</div>',
controller: 'theCtrl'
},
'fourth': {
template: '<div>{{text}}</div>',
controller: 'theCtrl'
},
'fifth': {
template: '<div>{{text}}</div>',
controller: 'theWaitCtrl',
resolve: {
'msg': function($q, $timeout, RandomNumberService) {
var deferred = $q.defer();
var waitDuration = RandomNumberService.getRandomNumber();
$timeout(function() {
deferred.resolve('View resolved after ' + waitDuration + ' milliseconds');
}, waitDuration);
return deferred.promise;
}
}
}
}
});
$urlRouterProvider.otherwise('/');
})
.controller('theCtrl', function($scope, $timeout, RandomNumberService) {
$scope.text = 'loading...';
var randomNumberOfMs = RandomNumberService.getRandomNumber();
$timeout(function() {
$scope.text = 'loaded after ' + randomNumberOfMs + 'milliseconds';
}, randomNumberOfMs);
})
.controller('theWaitCtrl', function($scope, msg) {
$scope.text = msg;
})
.factory('RandomNumberService', function() {
function getRandomNumber() {
return Math.floor(Math.random()*10000);
}
return {
getRandomNumber: getRandomNumber
};
})
;