Есть задача сделать так, чтобы параметры для фильтра в ng-repeat находились в url(как при GET запросе). Причем с обратной связью. Изменился фильтр, изменилось url, и наоборот. Я добился этого следующим способом. Есть объект search который прередается в фильтр и инициализирутся следующим образом:
var searchObj = $location.search();
$scope.search = {
name : searchObj.name || "",
group : searchObj.group || "0",
type : searchObj.type || "employee",
};
Есть вотчер на это объект и функция которая изменяет url:
$scope.$watch('search', function() {
$scope.updateUrl();
},true);
$scope.updateUrl = function(){
$scope.search.name ? $location.search("name",$scope.search.name ) : $location.search("name", null);
$scope.search.group !== "0" ? $location.search("group",$scope.search.group) : $location.search("group",null);
$scope.search.type ? $location.search("type",$scope.search.type) : $location.search("type",null);
}
ну и то же самое для обратной связи:
$rootScope.$on('$locationChangeSuccess', function () {
$scope.updateSearch();
});
$scope.updateSearch = function(){
var searchObj = $location.search()
if (searchObj.type) {$scope.search.type = searchObj.type};
if (searchObj.name) {$scope.search.name = searchObj.name};
if (searchObj.group) {$scope.search.group = searchObj.group};
}
Хотелось бы весь этот корявый функционал вынести в модуль, чтобы можно было подключать на разных страницах (за роутинг отвечает backend, каждая страница отдельное angular приложение) в разных контроллерах, с разными объектами для поиска. Нужны идеи от гуру angular как это все сделать и чтоб потом не стыдно было?