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

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


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

这将无法在移动设备上运行(也可以在chrome devtools的仿真器上运行)。它在切换菜单,但是没有重定向。

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

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

演示版

在您的开发工具中启用触摸仿真并单击链接。如您所见,toggle函数在链接不起作用时起作用。

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

最佳答案

我不知道这是否仍然有用,因为问题已经存在了一年多,但是最近我碰到了完全相同的问题。似乎有一个有关ngTouch的已知错误。 (https://github.com/angular/angular.js/issues/5307

适用于我的解决方案如下:

将ng-touch文件(angular-touch.js)的内容替换为您可以找到的here文件。 (对于某些人来说,此步骤可能不是必需的,但对我而言,是出于某种原因。)

然后进入文件并更改以下行:

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()函数,但是此解决方案可以帮您实现。

09-25 21:08