Задать вопрос

Создание модуля в angular?

Есть задача сделать так, чтобы параметры для фильтра в 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 как это все сделать и чтоб потом не стыдно было?
  • Вопрос задан
  • 317 просмотров
Подписаться 4 Оценить Комментировать
Пригласить эксперта
Ответы на вопрос 1
Правильнее всего будет сделать сервис, в котором содержится текущее значение search, имеются сеттер и геттер, а так же подписка на locationChange, и во время смены значения( как через сеттер, так и при смене url) вызывается броадкаст. Этот броадкаст уже слушаем в контроллере и делаем, что хотим. То есть схема такая: контроллер/локейшен -> {смена значения search} -> сервис -> {измененное значение search} -> всем, кто подписан.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы