Я сделал новый подход, в котором прослушивать $routeChangeStart
и изменять search()
, если содержащейся в предыдущей (несуществующей) странице важно GET параметры. Полный источник и демо можно найти на this Plunker.
Концепция похожа на решение @ Mikko, но реализация немного отличается (без специального поставщика), и она работает согласно инструкциям автора.
Сущность
angular.module('myApp').run(['$rootScope', '$location', 'URL', function($rootScope, $location, URL) {
// Previous search() value
var prevSearch = {};
// Listen to event
$rootScope.$on('$routeChangeStart', function(evt, next, current) {
// Have search() parameters and are going to default route
if(prevSearch !== undefined && $location.path().endsWith(URL.defaultRoute)) {
// Extract only important params
var important = {};
var importantCount = 0;
for(var param in prevSearch) {
if(URL.importantParams.indexOf(param) > -1) {
important[param] = prevSearch[param];
importantCount++;
}
}
// Unset prevSearch
prevSearch = {};
// Apply important params, if any
if(importantCount > 0) {
$location.search(important);
}
} else {
// Remember current search()
prevSearch = $location.search();
}
});
}]);
run
функция устанавливает для слушателя $routeChangeStart
, а также запоминает предыдущие значения величины search()
(ГЭТ Params).
Когда приложение перенаправляется на маршрут по умолчанию, он проверяет предыдущее значение параметров search()
и извлекает только важные. Если он есть, он переопределяет значение search()
и поэтому задает важные параметры GET для маршрута по умолчанию.
Я установил константу URL
, в которой можно установить маршрут по умолчанию и указать важные параметры. Код заключается в следующем:
angular.module('myApp').constant('URL', {
defaultRoute: '/mainpage',
importantParams: ['a', 'b'],
});
демонстрационной
ссылка первого содержит 3 параметров на несуществующий URL. Страница правильно перенаправляется на маршрут по умолчанию, и сохраняются только 2 важных.
В второй и четвертый ссылки не содержит каких-либо параметров, и обе ссылки не применяются какие-либо дополнительные параметры (независимо от того, на какой странице вы находитесь, когда вы щелкаете их).
Ссылка Третья ссылка также содержит 3 параметра по маршруту по умолчанию, и все они сохраняются (перенаправление не происходит).
Приятно слышать, что я вдохновил кого-то :)! Повторное использование в стороне, не следует переходить с «URL-адреса по умолчанию с параметрами», например, «Не существующие URL без параметров» по-прежнему сохраняют параметры? Другими словами, не существующий url с параметрами или без них всегда должен перенаправляться на 'main' с использованием параметров из последнего известного« хорошего »маршрута? –
Я принял этот ответ, потому что он проще и награжден щедростью @MikkoViitala, когда он был первым. +++ Что касается использования параметров с последнего известного «хорошего» маршрута, мне на самом деле все равно. Пользователь приходит из другого места, используя ссылку, ведущую к 'http: //example.com? Important = 42', и я должен перенаправить их на http: //example.com/main? Important = 42'. Аналогичным случаем будет http: //example.com/non-existing-page? Important = 42'. Это все, что мне нужно сейчас, еще не подумал о более сложных случаях. Спасибо вам обоим! – maaartinus