angular ui-router: how do I reload a state when a path parameter changes but not reload when a query parameter changes?

后端 未结 2 581
灰色年华
灰色年华 2020-12-29 09:08

For example, I want this change in navigation to reload the state:

  • #/detail/1
  • #/detail/2

But I do not want th

相关标签:
2条回答
  • 2020-12-29 09:26

    I've created a plunker, demonstrating that ui-router feature reloadOnSearch is working as documented here:

    reloadOnSearch:

    Boolean (default true). If false will not retrigger the same state just because a search/query parameter has changed. Useful for when you'd like to modify $location.search() without triggering a reload.

    So, what this says, that if we do have state like this

    .state('index.detail', {
          url: '/detail/:id',
          reloadOnSearch : false,
          ...
        })
    

    navigating to the

    • ui-sref="index.detail({id:1})"

    will load this state, while navigating to

    • ui-sref="index.detail({id:any-other-id})"

    will do nothing. But! If we would introduce new (e.g. sibling) state defined like this:

    .state('index.other', {
          url: '/other/:id',
          reloadOnSearch : false,
          ...
        })
    

    navigating to below sequence will always re-trigger state reload, not because the param change, but because the state change

    1. <a href="#/index/detail/1" ...
    2. <a href="#/index/other/1" ... // will relaod
    3. <a href="#/index/detail/2" ... // because the state
    4. <a href="#/index/other/2" ... // is changing

    See that all in action here...

    0 讨论(0)
  • 2020-12-29 09:42

    This is a bug in UI-Router that was fixed in release 0.2.15:

    https://github.com/angular-ui/ui-router/releases

    Upgrading to the latest will fix the issue

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