AngularJS / UIRouter: изменение маршрута не обновляет представление, пока не завершится выполнение контроллера целевого состояния

0

У меня есть приложение 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() загружать представление?

Благодарю!

Теги:
angular-ui-router

1 ответ

0

Он должен ждать завершения 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')
});

Ещё вопросы

Сообщество Overcoder
Наверх
Меню