使用$ location.search()更改参数时,请勿重新加载ngView模板

时间:2016-01-10 15:26:17

标签: angularjs ngroute

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);

1 个答案:

答案 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