2

所以我有一个使用传单库实例化的地图对象。地图实例在单独的模板中创建并以这种方式路由:-

var app = angular.module('myApp', ['ui', 'ngResource']);

app.config(function ($routeProvider) {

$routeProvider
    .when('/', {
        templateUrl: 'views/map.html',
        controller: 'MapCtrl'
    })
    .otherwise({
        redirectTo: '/'
    });

});

当我想处理“搜索/过滤”并在搜索我想要加载到地图实例上的对象时控制 GET 参数时,问题就开始了。

这是我实现的一个简单的过滤器功能,它根据用户单击的选定值(在下拉列表中)触发。

$scope.setFilter = function (fname, fvalue) {
    console.log("Setting " + fname + " to " + fvalue);
    var search_string = $location.search();
    search_string[fname] = fvalue;
    $location.search(search_string);
};

浏览器地址栏的 url 会按照我的预期进行更新,但原始(传单)地图对象会“更新”并从视图中消失。这不是我想要的。

如何防止这种情况发生或控制此过程以便仍然可以看到地图?

4

1 回答 1

6

这是因为更新 URL 参数会再次触发路由,这会导致控制器重新加载。有一个简单的解决方法。使用该属性reloadOnSearch并将其设置为 false。当 $location.search() 改变时,这不会重新加载控制器

$routeProvider
    .when('/', {
         templateUrl: 'views/map.html',
         controller: 'MapCtrl',
         reloadOnSearch: false
    })
    .otherwise({
         redirectTo: '/',
         controller: 'MapCtrl',
         reloadOnSearch: false
    });

});
于 2013-07-31T06:29:07.807 回答