Модуль ngTouch предотвращает перенаправление на URL из атрибута href
Что-то не так с моим приложением на мобильных устройствах. У меня есть что-то вроде этого:
<a href="#!/kategori/hva-skjer" ng-click="toggleMenu()">
Это одна из ссылок в меню. Что я хочу и что хорошо работает на декстопе, так это закрытие меню и перенаправление на правильный URL из href
приписывать.
Это не будет работать на мобильных устройствах (на эмуляторе в Chrome Devtools тоже). Это переключение меню, но без перенаправления.
Когда я удаляю ngTouch
модуль от зависимостей в файле начальной загрузки приложения, проблема исчезает.
У кого-то была похожая ситуация и знаете уже решение? Или это ошибка модуля ngTouch?
демонстрация
В ваших инструментах разработки включите сенсорную эмуляцию и нажмите на ссылки. Как вы видете toggle
Функция работает, когда ссылки нет.
2 ответа
Я не знаю, если это все еще полезно, видя, что этому вопросу больше года, но я недавно столкнулся с той же самой проблемой. Кажется, есть известная ошибка, связанная с ngTouch. ( https://github.com/angular/angular.js/issues/5307)
Решение, которое сработало для меня, выглядит следующим образом:
Замените содержимое вашего файла ng-touch (angular-touch.js) файлом, который вы можете найти здесь. (Этот шаг может быть не нужен для некоторых, но для меня это было по какой-то причине.)
Затем перейдите в файл и измените следующие строки:
ngTouch.directive('ngClick', ['$parse', '$timeout', '$rootElement',
function($parse, $timeout, $rootElement) {
к:
ngTouch.directive('ngClick', ['$parse', '$timeout', '$rootElement', '$location',
function($parse, $timeout, $rootElement, $location) {
Тогда найдите эту часть:
if (!angular.isDefined(attr.disabled) || attr.disabled === false) {
element.triggerHandler('click', [event]);
}
И добавьте if прямо под ним так:
if (!angular.isDefined(attr.disabled) || attr.disabled === false) {
element.triggerHandler('click', [event]);
}
if the element has an href attribute, ensure that the url gets updated.
if (attr.href && angular.isString(attr.href)) {
$location.url(attr.href);
}
Вы также можете прекратить использовать href и вручную изменить свои hrefs на функцию location.go(), но это решение сделает это за вас.
Это старая ошибка, которая не была исправлена до этого времени. Href и ng-click не работают вместе.
Ниже вы видите, как можно избежать этой ошибки.