Вы можете использовать публичный наблюдаемый список для хранения общедоступных данных или просто создать общедоступный метод настройки для хранения данных и получения из соответствующего контроллера
Удалить якорь, к которому вы собираетесь перейти, затем использовать подход №2? Поскольку привязки нет, установка хэша не должна прокручивать страницу.
Другой вариант - удалить хеш и сохранить его в хранилище сеансов для извлечения при перезагрузке:
var newUrl = location.href + '#myHash';
var splitUrl = newUrl.split('#');
newUrl = splitUrl[0];
if (splitUrl[1]){
sessionStorage.savedHash = splitUrl[1];
}
location.href = newUrl;
, а затем в верхней части страницы вы можете получить следующий код:
var savedHash = sessionStorage.savedHash;
if (savedHash){
delete sessionStorage.savedHash;
location.hash = savedHash;
}
Следует ожидать, что #foo прокрутится до привязки идентификатора "foo". Если вы хотите использовать подход №1 и перезагрузить его, этот подход может сработать.
if (Object.defineProperty && Object.getOwnPropertyDescriptor) { // ES5
var hashDescriptor = Object.getOwnPropertyDescriptor(location, "hash"),
hashSetter = hashDescriptor.set;
hashDescriptor.set = function (hash) {
hashSetter.call(location, hash);
location.reload(true);
};
Object.defineProperty(location, "hash", hashDescriptor);
} else if (location.__lookupSetter__ && location.__defineSetter__) { // JS
var hashSetter = location.__lookupSetter__("hash");
location.__defineSetter__("hash", function (hash) {
hashSetter.call(location, hash);
location.reload(true)
});
}