javascript - Angular.js 移动浏览器应用程序在 iOS 8 Safari 上卡住

标签 javascript ios angularjs safari freeze

我们的 Angular.js Web 应用有时会在 iOS8 Safari 上卡住。发生此问题时,不会触发 ng-click 回调。如果您将 ng-click 替换为常规的 javascript onclick,它将起作用。在 iOS8 设备上的 Chrome 中不会发生这种情况。

有没有其他人在 iOS8 Safari 上注意到这个问题或有解决办法?

这个简单的 View 有时会在 iOS8 safari 上卡住。卡住通常发生在您打开选项卡、转到浏览器上的其他选项卡或可能离开浏览器体验并稍后返回时。在此示例中,当点击链接时 View 卡住时,tapCount 不会增加。 View 越复杂,它就越容易卡住。在此示例中,当我快速点击链接时,浏览器会卡住几秒钟。通常在真正复杂的 View 上卡住需要更长的时间。

var app = angular.module('myApp', []);
app.controller('freezeCtrl', function($scope) {
  $scope['tapCount'] = 0;

$scope['dummyItems'] = [];
for(var i = 0; i < 15; i++) {
    var anItem = {'id': i};
    ($scope['dummyItems']).push(anItem);
}

$scope['updateTapCount'] = function() {
    $scope.tapCount += 1;
};
});
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.16/angular.min.js"></script>
<div  ng-app="myApp">
  <div ng-controller="freezeCtrl">
    <p>Tap Count = {{tapCount}}</p>
    <ul>
        <li ng-repeat="item in dummyItems" bindonce>
            <p>This is a dummy item #{{item.id}}</p>
        </li>
    </ul>
    <div>
      <button ng-click="updateTapCount()">Button 1</button>
      <button ng-click="updateTapCount()">Button 2</button>
    </div>
  </div>
</div>

最佳答案

我找到了解决方案,而且好像我在其他人修复 Angular 中的错误时就找到了解决方案!它已在 Angular 1.3.x 中修复。

错误出现在 angular.js 代码中的“isArrayLike”处。有时 obj.length 在赋值“var length = obj.length;”后未定义。可变长度获得值“1”。这将导致 isArrayLike 对于不是 arrayLike 的对象返回 true。这个 bug 尤其会破坏 angular 的 forEach 和随后的 JQLite 的“eventHandler”。因此,当发生这种情况时,不会执行任何事件处理程序。

关于javascript - Angular.js 移动浏览器应用程序在 iOS 8 Safari 上卡住,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29995024/

相关文章:

javascript - React 和 React Router 中的子域路由

javascript - 给定内部 div 动态创建同心 div

ios - swift 枚举 : perform code on value change?

javascript - Angular 谷歌地图 Angular 设置半径与范围 slider

javascript - 工厂方法 HTTP 不工作

angularjs - 为什么我收到错误...意外请求 : GET/internalapi/quotes

javascript - 检测DIV的高度是否改变

ios - 如何正确设置隐藏在 UITableViewCell 内的 UIStackView 的动画?

iOS:委托(delegate)设置

javascript - 如何在 CSS 中制作时钟并在 JS 中工作