当我使用 $location.search() 更改参数时,不要重新加载 ngView 模板

Don't reload the ngView template when I change a parameter with $location.search()

关于如何使用 Angularjs 在 URL 中设置参数,以便它们可以在页面重新加载时保留。但它导致 Google 地图出现问题。

我正在使用 ngRoute 浏览我的应用程序。我在 URL 中设置参数时遇到的问题是,每次我设置参数(无论是 $location.search() 还是普通的旧 window.location.hash='something')时,Google Maps 地图将被卸载。我尝试更改参数名称,因为我认为 Google 地图默认会监听其中的一些选项。但事实并非如此。

一旦我完全摆脱了 ngRoute 代码,而不是 ngView 指令,我将我的页面包含在 ng-include 中,当我操纵了参数。

我不太清楚到底发生了什么或为什么会发生,但我猜想 ngRoute 认为它必须再次编译我的模板文件,因为 "something" 在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);
};

这就是我设置自定义 GET 参数的方式,根据我的另一个 Whosebug 问题中的代码:

var params = $location.search();
params.source = source.filename;
$location.search(params);

您正在寻找 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