Модуль ngTouch предотвращает перенаправление на URL из атрибута href

Что-то не так с моим приложением на мобильных устройствах. У меня есть что-то вроде этого:

<a href="#!/kategori/hva-skjer" ng-click="toggleMenu()">

Это одна из ссылок в меню. Что я хочу и что хорошо работает на декстопе, так это закрытие меню и перенаправление на правильный URL из href приписывать.

Это не будет работать на мобильных устройствах (на эмуляторе в Chrome Devtools тоже). Это переключение меню, но без перенаправления.

Когда я удаляю ngTouch модуль от зависимостей в файле начальной загрузки приложения, проблема исчезает.

У кого-то была похожая ситуация и знаете уже решение? Или это ошибка модуля ngTouch?

демонстрация

В ваших инструментах разработки включите сенсорную эмуляцию и нажмите на ссылки. Как вы видете toggle Функция работает, когда ссылки нет.

http://plnkr.co/edit/1TldHkHvVfo4OmH7MLk4?p=preview

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 не работают вместе.

Ниже вы видите, как можно избежать этой ошибки.

/questions/18100611/angularjs-ispolzovanie-perenapravleniya-ngtouch-s-ngroute-ne-rabotaet-s-atributami-href-i-ng-click/18100615#18100615

Другие вопросы по тегам