“ui-sref” does not refresh the “ui-view”(its controller does not rerun) when a link is clicked twice

后端 未结 4 551
伪装坚强ぢ
伪装坚强ぢ 2020-12-29 23:43

When a state is clicked at first, the div that owns the \"ui-view\" attribute is replaced with the \"template\" of that state. However, when I click the same state again, it

相关标签:
4条回答
  • 2020-12-30 00:22

    Alternative syntax to go to a different view it would be

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

    On the controller it would look like this.

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

    Note: The second parameter of $state.go is $stateParams.

    0 讨论(0)
  • 2020-12-30 00:24

    Like Philipp said, it is because this is the default behavior of ui-router, BUT if you would like to reload your controller each time you click on your link, you can actually use the ui-sref-opts attribute to force it, like this:

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

    Found this tip here:

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

    Hope it could help

    0 讨论(0)
  • 2020-12-30 00:40

    just use below code

    $stateProvider.
      state('myPage', {
        url: '/',
        cache: false // add this line
    
    0 讨论(0)
  • 2020-12-30 00:45

    Because that's how ui-router is designed.

    The controller is only loaded when it isn't in the same state. ui-router will not rerun a controller, and not reevaluate a view template. Even when you use the same controller on multiple states and switch between those, the controller will not rerun.

    If you want to run functionality when the a view changes you could listen for events, or even put an ng-click on your a element.

    0 讨论(0)
提交回复
热议问题