2013-07-31 38 views
2

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

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

app.config(function ($routeProvider) { 

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

}); 

的问题时,我想处理“搜索/过滤”和控制GET PARAMS反对,我想装上搜索对象时开始地图实例。

下面是我实现的一个简单的过滤函数,它根据用户点击的选定值(在下拉列表中)进行触发。我期望它,但原来(单张)地图对象被“更新”,并从视野中消失

$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得到更新。这不是我想要的。

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

+0

也许您可以尝试在每次触发过滤器时触发重新绘制地图。 – zsong

回答

6

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

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

}); 
+0

O gosh,我刚刚在文档中发现了'reloadOnSearch:false' !!!!!!!!!!!谢谢! :-D –

+0

设置reloadOnSearch:false表示单击具有不同搜索词的链接将不会执行任何操作。 – timkay

+0

以及在这种情况下的意图 – Atrix1987