在一个页面上,我根据用户选择(过滤器)通过ajax加载内容,以确保在用户重新加载或登陆页面时加载的内容保持不变,我将选中的过滤器放入url查询字符串中。由于我在此特定页面上通过ajax加载内容,因此每次用户选择新过滤器时都不需要重新加载整个页面,因此我阻止浏览器使用以下配置对URL更改做出反应:
app.config(['$locationProvider', function($locationProvider) {
$locationProvider.html5Mode(true);
}]);
然而,这会影响整个应用,并阻止所有其他网页重新加载网址更改,这是我不想要的行为。如何使此配置仅影响我的应用程序中的一个特定控制器?
答案 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上的文档,也许这种行为的原因是设计原因:
如果你的应用对网址作出反应,作为一种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
。