$route.reload() не работает с ui-router

Я переключился на ui-router. Все прошло гладко, кроме одного. На моей странице у меня есть выбор, который меняет контекст приложения. Во всяком случае, ранее, когда этот контекст был изменен, я выполнял этот код (в частности, метод set):

'use strict';
angular.module('main').factory('lacContext', ['$route', function ($route) {
    return {
        set: function (id) {
            sessionStorage.setItem("lac-context", id);
            $route.reload();
        },
        get: function () {
            return sessionStorage.getItem("lac-context");
        }
    };
}])

и

$route.reload()

занимался самым важным делом. Он перезагрузил страницу. Но после переключения на ui-router $route.reload ничего не делает. Также я не нашел аналога в API ui-router. Как решить эту проблему?


person dragonfly    schedule 25.10.2013    source источник
comment
Вы пробовали $state.go('.')?   -  person Chandermani    schedule 25.10.2013
comment
Неа. Как я могу получить доступ к текущему состоянию?   -  person dragonfly    schedule 25.10.2013
comment
Вам нужно внедрить службу $state так же, как вы делаете $route, после чего вы можете вызвать этот метод. См. документацию github.com/angular- пользовательский интерфейс/пользовательский интерфейс/вики/   -  person Chandermani    schedule 25.10.2013
comment
Я сделал это, и $state не определено   -  person dragonfly    schedule 25.10.2013
comment
Если вы правильно внедрили зависимость ui-router в модуль, вы получите объект $state. См. эту вики-ссылку с примерами github.com/angular-ui/ui-router/wiki< /а>   -  person Chandermani    schedule 25.10.2013
comment
У меня установлена ​​зависимость. В противном случае другие функции не будут работать   -  person dragonfly    schedule 25.10.2013
comment
Придержи лошадей. В эти выходные буду реализовывать.   -  person Nate Abele    schedule 26.10.2013


Ответы (5)


Как насчет:

$state.go($state.$current, null, { reload: true });
person devdave    schedule 22.01.2014
comment
Разве это не должно быть $state.go($state.current, null, {reload: true}); ? - person Todd Williams; 17.10.2016

Вы можете сделать $state.reload()

Иногда возникает ошибка, из-за которой контроллер не создается повторно. Вы можете обойти это с помощью

$state.transitionTo($state.current, $stateParams, { reload: true, inherit: true, notify: true });
person Will Stern    schedule 16.07.2014

Хорошо, это работает, когда я ввожу $state в контроллер.

Но при внедрении его в службу, например фрагмент кода, конечно, $state не было определено.

Несмотря на то что

$state.go('.')

не получилось, сделал так:

    $stateProvider
      .state('home', {
          controller: function ($state) {
              $state.go('advisoryLeadOffering.packages');
          }
      })
      .state('advisoryLeadOffering.packages', {
          url: "/packages",
          templateUrl: "/AdvisoryLeadOffering/Packages",
          controller: 'AdvisoryLeadOfferingPackages'
      })

и когда мне нужно перезагрузить, я делаю что-то вроде этого:

$state.transitionTo('home');

внутри метода области видимости.

person dragonfly    schedule 25.10.2013

У меня была аналогичная проблема, когда я хотел, чтобы ссылка за пределами контроллера обновляла состояние, и я просто создал функцию reload() в контроллере.

SomeCtrl:

$scope.reload = function(){
    $state.transitionTo('myState');
}

Добавьте это к своему якорю:

ng-click="reload()"

H/T @dragonfly за то, что указал мне на transitionTo().

person Jesse    schedule 27.01.2014

Единственное, что сработало для меня:

Создать состояние перенаправления:

$stateProvider.state('redirect', {
    url: 'redirect/:to',
    controller: function($state, $stateParams, $scope) {
        $state.go($stateParams.to, null, {reload: true});
    }
});

Перейти к этому состоянию:

$state.go('redirect', {to: $state.current.name}, {reload: true});
person eugenes    schedule 27.08.2015