这是一个奇怪的问题,这是一些难以产生和探索的问题。
在使用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-touch
,ng-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();
});
};
}
};
});
无法找到解决问题的正确方法。
感谢。
答案 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上使用私密浏览时,浏览器不会保存本地存储上的数据并且它会抛出异常并杀死代码。
嗯,谢谢你。