Подтвердить что ты не робот

"ui-sref" не обновляет "ui-view" (его контроллер не перезапускается) при двойном щелчке ссылки

Когда сначала щелкнет состояние, div, которому принадлежит атрибут "ui-view", заменяется "шаблоном" этого состояния. Однако, когда я снова нажимаю одно и то же состояние, его контроллер не перезагружается. Как я могу снова загрузить этот контроллер?

Например, предположим, что у меня есть следующее меню навигации:

<nav> 
    <a ui-sref="state1">State 1</a>
    <a ui-sref="state2">State 2</a>
</nav>

Мой контент "ui-view" выглядит следующим образом:

<div ui-view></div>

Мои состояния описаны ниже. Когда я нажимаю "State1" в меню навигации, я ожидаю увидеть текст "Ctrl 1 loaded" на developer console. Если это первый раз, я наблюдаю этот текст. Однако, когда я повторно нажимаю одну и ту же ссылку, контроллер не загружается снова, то есть я не мог дважды увидеть текст "Ctrl 1 loaded", отображаемый на консоли.

myApp.config(function ($stateProvider, $urlRouterProvider){
    $stateProvider.state("state1", {
        url: "#",
        template: "<p>State 1</p>",
        controller: "Ctrl1"
      }).state("state2", {
        url: "#",
        template: "<p>State 2</p>",
        controller: "Ctrl2"
      });
});

Почему? У вас есть идеи?

Вот JSFiddle этого вопроса.

4b9b3361

Ответ 1

Как сказал Филипп, это потому, что это поведение по умолчанию для ui-router, но если вы хотите перезагрузить контроллер каждый раз, когда вы нажимаете на свою ссылку, вы можете использовать ui-sref-opts, чтобы заставить его, например:

<a ui-sref="state1" ui-sref-opts="{reload: true}">State 1</a>

Нашел этот совет здесь:

https://github.com/angular-ui/ui-router/commit/91a568454cc600aa4f34dedc8a80c9be1130b1c5

Надеюсь, что это поможет

Ответ 2

Альтернативный синтаксис для перехода к другому представлению будет

<a ui-sref="state1({reload: true})">State 1</a>

На контроллере это будет выглядеть так.

$state.go('state1', {}, {reload: true});

Примечание. Второй параметр $state.go - $stateParams.

Ответ 3

В связи с тем, как разработан ui-router.

Контроллер загружается только тогда, когда он не находится в том же состоянии. ui-router не перезапустит контроллер и не переоценит шаблон представления. Даже когда вы используете один и тот же контроллер на нескольких состояниях и переключаетесь между ними, контроллер не будет перезагружен.

Если вы хотите запускать функциональные возможности при изменении вида, вы можете прослушать события или даже поставить ng-click на свой a.

Ответ 4

просто используйте ниже код

$stateProvider.
  state('myPage', {
    url: '/',
    cache: false // add this line