Я разрабатываю в Angular, используя пакет узлов для плавной прокрутки. У меня есть навигационная панель на всех моих страницах (в качестве директивы), и если кто-то находится в моем состоянии истории /history
и нажимает на ссылку в навигационной панели, чтобы перейти к определенному разделу на главной странице /
, я хочу, чтобы сайт переключил состояния на состояние главной страницы, а затем автоматически прокручивается в раздел, который пользователь нажал на панели навигации.
Прямо сейчас я делаю
scope.goToSection = function (val, state) {
$state.go(state)
setTimeout(function() {smoothScroll(document.querySelector(val))}, 100);
}
который работает, но я не уверен, что это самый естественный способ получить эту функциональность.
Я попробовал $state.go(state).then(smoothScroll(document.querySelector(val)));
но страница не будет прокручиваться после переключения состояний. Есть ли лучший или более естественный способ получить эту функциональность?
Проблема с пользовательскими функциями, используемыми для переключения состояний вместо ui-sref, заключается в том, что вы теряете, например, возможность щелкнуть мышью, чтобы открыть на новой вкладке и т.д.
Решением этого будет проверка события $ stateChangeSuccess и прокрутка на основе данных, переданных в новое состояние.
$rootScope.$on('$stateChangeSuccess', function(e, toState, toParams) {
// do the scrolling
});