Angularjs:仅将配置用于一个控制器

时间:2016-02-04 15:06:04

标签: angularjs ng-controller

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

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

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

3 个答案:

答案 0 :(得分:1)

如果您的目标是在查询字符串更改时阻止重新加载页面,则html5Mode完全是该作业的错误工具。您希望reloadOnSearch: false可以全局应用或单独路由:

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

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

答案 1 :(得分:0)

来自Angular在$locationProvider上的文档,也许这种行为的原因是设计原因:

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

如果你的应用对网址作出反应,作为一种RESTful api进行更改,我建议使用ngRoute或更好uiRouter

希望有所帮助。

答案 2 :(得分: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