【问题标题】:AngularJS $stateParams when using reloadOnSearch:falseAngularJS $stateParams 使用 reloadOnSearch:false
【发布时间】:2014-12-22 14:56:34
【问题描述】:

我的应用程序中有一个使用搜索的页面,因此我添加了 "realloadOnSearch:false" 效果很好

我遇到的问题是导航到具有不同 stateParam 的相同状态时:

当我从任何其他页面导航到 #/category/20/ 时,它工作正常...然后我在该页面上有一个链接到 #/category/3(20 的父类别)和 URL 更新,但内容没有(没有控制台错误)

app.js(主应用程序)

        .state('category', {
            url: '/category/:categoryId/',
            templateUrl: '/Home/Category',
            controller: 'categoryCtrl',
            reloadOnSearch: false
        })

我已尝试添加 target="_self" 来强制页面重新加载,但它不起作用

我也尝试观察 $stateParams 的变化,但没有任何变化

点击 #/category/20 中的 #/category/3 链接(反之亦然) 应该导航到新页面并重新加载数据,其中搜索应该重新加载页面(后者有效但前者无效)

URL 最好是 ng-href 而不是 ng-click,因为它由根控制器管理

编辑:

我没有找到直接的解决方案,但是我只是禁用了 reloadOnSearch 并且我的排序按钮仍然有效,所以这对我来说是目前的解决方案。

【问题讨论】:

  • 会触发 $stateChangeStart 和 $stateChangeSuccess 事件吗?
  • 我尝试在运行时从 $rootScope 监听这两个事件,但没有触发任何事件 =/ @NevilleS

标签: javascript angularjs search angular-ui-router


【解决方案1】:

问题是reloadOnSearch 并没有按照你的想法去做;它实际上更像reloadOnStateParams。将其设置为 false 可防止您在仅更改 stateParams 的情况下进行状态更改,这就是您在此处所做的(从 #/category/3 变为 #/category/20)。

您可以在 UI 路由器问题页面上查看此文档:https://github.com/angular-ui/ui-router/issues/1079

那里有一些解决方法,但没有一个很好。您最好使用手动强制重新加载的 ng-click,如下所示:

$state.transitionTo($state.current, $stateParams, {
  reload: true,
  inherit: false,
  notify: true
});

【讨论】:

  • 我已经按照你说的做了,即使他们我也不能动。我什至手动设置了 $stateParams.categoryId 并且它仍然保持不变。该事件在 ng-click 上触发。我尝试了更多的东西,我会带着更新回到这里
  • 根据您的状态定义,ui 路由器可能会主动阻止您执行此操作。我建议您在$state.transitionTo 中设置一个断点并逐步执行那里的逻辑,尤其是shouldTriggerReload 逻辑。看起来reloadOnSearch 可能会取代您提供的所有reload 选项...
猜你喜欢
  • 2015-01-12
  • 1970-01-01
  • 2016-08-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多