使用IOS 8.3在Safari上进行Angular ng-click问题

时间:2016-01-03 10:28:44

标签: ios iphone angularjs safari angularjs-ng-click

这是一个奇怪的问题,这是一些难以产生和探索的问题。

在使用Angular构建Web应用程序时,我的老板发现应用程序中使用ng-click指令的所有按钮都无效。

现在,此问题仅发生在iphone 6 with IOS 8.3 and using the safari browser

我可以说,当在iPhone5(所有版本),iPhone 6(IOS 9),Safari for Windows和所有其他浏览器(移动和桌面)上进行测试时,ng-click就像魅力一样。

正在使用Angular 1.4.3构建应用。

这是按钮的代码,正如您所看到的,没有什么特别之处:

<button class="btn calculate-button" ng-click="onCalculate()">Calculate</button>

在控制器中:

$scope.onCalculate = function () {
     //Do something... And then:
     $state.go('someplace');
};



我尝试了许多此处建议的更改,包括ng-touchng-bind,构建我自己的click指令,如下所示:

.directive('basicClick', function($parse, $rootScope) {
    return {
        compile: function(elem, attr) {
            var fn = $parse(attr.basicClick);
            return function(scope, elem) {
                elem.on('click', function(e) {
                    fn(scope, {$event: e});
                    scope.$apply();
                });
            };
        }
    };
});

无法找到解决问题的正确方法。

感谢。

2 个答案:

答案 0 :(得分:22)

IOS 8.4.1更新存在一个已知问题,即停止ng-link和ng-click工作。

使用“touchstart click”可以解决此问题。

app.directive("ngMobileClick", [function () {
    return function (scope, elem, attrs) {
        elem.bind("touchstart click", function (e) {
            e.preventDefault();
            e.stopPropagation();

            scope.$apply(attrs["ngMobileClick"]);
        });
    }
}])

HTML电话:ng-mobile-click="onCalculate()"

答案 1 :(得分:8)

我最后修好了。

问题出在函数的//Do something... And then:部分。 在此过程中的某个时刻,该功能会将一些数据保存到浏览器本地存储中。

我的老板在safari上使用隐私浏览,显然当在safari上使用私密浏览时,浏览器不会保存本地存储上的数据并且它会抛出异常并杀死代码。

嗯,谢谢你。