4

在一个页面上,我根据用户选择(过滤器)通过 ajax 加载内容,以确保在用户重新加载或登陆页面时加载的内容保持原位,我将选择的过滤器放入 url 查询字符串中。由于我在此特定页面上通过 ajax 加载内容,因此每次用户选择新过滤器时都不需要重新加载整个页面,因此我阻止浏览器使用以下配置对 url 更改做出反应:

app.config(['$locationProvider', function($locationProvider) {
    $locationProvider.html5Mode(true);
}]);

但是,这会影响整个应用程序并阻止所有其他页面在 url 更改时重新加载,这是我不想要的行为。如何使此配置仅影响我的应用程序中的一个特定控制器?

4

3 回答 3

1

如果您的目标是防止在查询字符串更改时重新加载页面,那么 html5Mode 完全不适合这项工作。您希望reloadOnSearch: false可以将其应用于全局或单个路由:

$routeProvider
  .when('/foo', {
    controller: 'fooCtrl',
    templateUrl: 'foo.html',
    reloadOnSearch: false
  },
  ...
);

https://docs.angularjs.org/api/ngRoute/provider/$routeProvider

于 2016-02-04T15:52:42.950 回答
0

从 Angular 关于$locationProvider的文档来看,这种行为的原因可能是设计使然:

  • rewriteLinks - {boolean} - (默认值:true)启用 html5Mode 时,启用/禁用相对链接的 url 重写。

如果您的应用程序对 url 做出反应以作为一种 RESTful api 进行更改,我建议使用ngRoute甚至更好的 uiRouter

希望有帮助。

于 2016-02-04T15:44:00.287 回答
0

这是一个棘手的情况,您可能不喜欢我的建议;哎呀,我什至不喜欢这个建议,因为它破坏了单页应用程序的整体魅力。

但是您可以做的是创建一个单独的 html 文件(让我们称之为pick-filters.html)。在那个新的 html 文件上,有一个新ng-app的 app.js 文件,因此这个特定页面有一个单独的文件。在这个新的 app.js 文件(让我们称之为pick-filters-app.js)中,您可以使用此处显示的 app.config 片段。这应该可以解决所有页面未重新加载的问题,因为仅pick-filters.html引用pick-filters-app.js具有此配置片段的页面。

于 2016-02-04T15:44:52.033 回答