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

时间:2014-03-26 13:22:43

标签: javascript angularjs angularjs-ng-touch

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

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

这是菜单中的链接之一。我想要的以及在dekstop上运行良好的是关闭菜单并从href属性重定向到正确的URL。

这不适用于移动设备(在chrome devtools上的模拟器上)。它切换菜单,但没有重定向。

当我从app bootstrap文件中的依赖项中删除ngTouch模块时,问题就会消失。

有人有类似的情况,知道已经解决了吗?或者它是ngTouch模块的错误?

演示

在您的开发工具中启用触摸模拟并单击链接。正如你可以看到toggle函数在没有链接的情况下工作。

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

2 个答案:

答案 0 :(得分:2)

我不知道这是否仍然有用,因为这个问题已经超过一年了,但我最近遇到了同样的问题。似乎有一个关于ngTouch的已知错误。 (https://github.com/angular/angular.js/issues/5307

对我有用的解决方案如下:

使用您可以找到的文件here替换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()函数,但此解决方案可以帮助您。

答案 1 :(得分:0)

这是一个旧的错误,在此之前没有修复。 Href和ng-click不能一起使用。

下面你看看你怎么能避免这个bug。

https://stackoverflow.com/a/34612541/4245233