У меня есть приложение Angular с маршрутизатором UI.
Я нахожусь в точке зрения, где у меня есть ui-sref
идущий на мой маршрут:
<a ng-href="#" ui-sref="app.myRoute">Next</a>
Маршрут, на который я собираюсь загрузить контроллер, выполняющий длинную задачу при загрузке:
app.controller('MyRouteController', function($scope) {
this.load = function() {
// ... make a long service call
};
this.load();
});
Поведение, которое я вижу, заключается в том, что при нажатии ссылки ui-sref
представление не изменяется до тех пор, пока метод load()
будет завершен. Это верно, даже если обернуть вызов load()
в $timeout
.
Как я могу сразу изменить вид и заставить асинхронный вызов load()
загружать представление?
Благодарю!
Он должен ждать завершения load
пока он называется синхронно. И он не должен (и не будет), пока он вызывается с $timeout
.
var app = angular.module('app', ['ui.router']);
app.config(function ($stateProvider) {
$stateProvider
.state('root', {
url:'/',
template: '<div ng-controller="AppController"></div>',
controller: function ($timeout) {
console.log('route controller')
$timeout(function () {
console.log('route controller timeout')
})
}
})
.state('otherwise', {
url: "*path",
template: '<a ui-sref="root">root</a>'
});
});
app.controller('AppController', function () {
console.log('app controller')
});