【问题标题】:Angularjs: use config only for one controllerAngularjs:仅对一个控制器使用配置
【发布时间】:2016-02-04 15:06:03
【问题描述】:

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

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

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

【问题讨论】:

  • 我相信答案是你不知道。假设为这个配置和控制器创建一个单独的模块不会这样做。也许如果您更新问题,说明为什么一个控制器需要这个,我们可以找到另一种方法来做您正在寻找的事情。
  • @Matthew Green,我根据您的建议更新了我的问题。谢谢。

标签: angularjs ng-controller


【解决方案1】:

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

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

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

【讨论】:

  • 我没有在我的应用程序中使用角度路由,但如果现在只为一个特定的路由添加它,那么我将不得不在该路由中使用标签,这在我的情况下是不可取的。要删除这个标签,无论如何我都必须使用$locationProvider.html5Mode(true)。这是一个很好的信息,我不知道有这样的选择,现在会调查它。谢谢。
【解决方案2】:

从 Angular 在 $locationProvider 上的文档中可以看出,这种行为的原因可能是设计使然:

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

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

希望对您有所帮助。

【讨论】:

    【解决方案3】:

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

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

    【讨论】:

      猜你喜欢
      • 2018-01-14
      • 1970-01-01
      • 2015-08-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多