ngTouch模块防止从href属性重定向到url

ngTouch module prevent redirect to url from href attribute

本文关键字:属性 重定向 url href 模块 ngTouch      更新时间:2023-09-26

我的应用程序在移动设备上出现了问题。像这样:

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

这是菜单中的一个链接。我想要的和在dekstop上运行良好的是关闭菜单并从href属性重定向到适当的url。

这不会在移动设备上工作(在chrome devtools的模拟器上也是)。它在切换菜单,但没有重定向。

当我从应用程序引导文件中的依赖项中删除ngTouch模块时,问题就消失了。

有人有类似的情况,已经知道解决方案了吗?还是说这是ngTouch模块的bug ?

演示

在你的开发工具中启用触摸模拟和点击链接。如你所见,toggle函数工作时,链接没有。

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

我不知道这是否仍然有帮助,因为这个问题已经有一年多了,但我最近看到了完全相同的问题。似乎有一个关于ngTouch的已知bug。(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并手动将您的href更改为location.go()函数,但此解决方案可以为您完成此操作。

这是一个老bug,在此之前没有修复。Href和ng-click不能一起工作。

下面您将看到如何避免此错误。https://stackoverflow.com/a/34612541/4245233