我posted a question recently关于如何使用Angularjs在URL中设置参数,以便在页面重新加载时保留它们。但它导致谷歌地图出现问题。
我正在使用ngRoute
浏览我的应用程序。我在URL中设置参数时遇到的问题是每次我设置一个参数(无论是$location.search()
还是只是一个普通的window.location.hash='something'
),谷歌地图都会得到卸载。我尝试更改参数名称,因为我认为Google地图默认会侦听其中一些选项。但事实并非如此。
一旦我完全摆脱了ngRoute
代码,而不是ngView
指令,我将我的网页包含在ng-include
中,当我操作时,地图不再被卸载参数。
我不知道究竟是什么或为什么会发生,但我猜想ngRoute
认为必须再次编译我的模板文件,因为URL中的“某些东西”已经改变了。所以我想要的是,以某种方式向ngRoute解释,如果?
之后的部分发生了变化,那么就不应该再次尝试编译我的模板文件(并随后破坏加载的Google地图),因为那些是只是我的附加选项。但如果?
之前的部分发生了变化,那就没问题了,因为那时页面发生了变化。
或者,还有另一种更好的,更好的Angular方式解决这个问题吗?
这是我的ngRoute
配置:
app.config(function($httpProvider, $routeProvider) {
// Routing
$routeProvider.when("/", {
redirectTo: "/Map"
}).when("/Map", {
controller: "MapController",
templateUrl: "tpl/view/map.html"
}).when("/Table", {
controller: "TableController",
templateUrl: "tpl/view/items-table.html"
}).otherwise({
templateUrl: "tpl/view/404.html"
});
});
这是我更改网页的代码:
$scope.navigate = function(location) {
$location.path(location);
};
这就是我根据其他Stackoverflow问题的代码设置自定义GET参数的方法:
var params = $location.search();
params.source = source.filename;
$location.search(params);
答案 0 :(得分:2)
您正在寻找reloadOnSearch
财产。
app.config(function($httpProvider, $routeProvider) {
...
}).when("/Map", {
controller: "MapController",
templateUrl: "tpl/view/map.html",
reloadOnSearch: false
})
...
});
https://docs.angularjs.org/api/ngRoute/provider/ $ routeProvider