You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

升级至iPhone 14.6版本后AngularJS select组件无法正常运行

iOS 14.6 下 AngularJS select 组件 ng-model 不更新问题解决方案

根因说明

iOS 14.6 调整了原生表单控件的事件触发优先级,<select> 下拉框的 change 事件脱离了 AngularJS 1.x 默认的脏值检测监听上下文。选择下拉选项后,控件实际值已经变更,但 AngularJS 没有触发脏值检测循环,导致 ng-model 绑定的变量没有同步更新,只有当页面内有其他操作触发脏检测时(比如点击其他按钮、滚动页面)才会显示最新值,所以会出现偶发正常的现象。该问题由系统层逻辑变更导致,和浏览器本身无关,所有运行在 iOS 14.6 上的浏览器均可复现。

解决方案

全局修复方案(推荐)

新增全局指令统一处理所有 <select> 元素的兼容问题,无需修改原有业务代码:

// 在你的应用主模块中添加该指令
angular.module('yourApp').directive('select', () => ({
  restrict: 'E',
  link: (scope, element) => {
    // 监听原生change事件,手动触发脏值检测
    element.on('change', () => scope.$applyAsync());
  }
}));

单组件修复方案

如果只需要修复个别页面的select问题,可以直接在出问题的select标签上添加ng-change触发脏检测:

<select
  ng-model="yourSelectedVar"
  ng-options="item.id as item.name for item in optionList"
  ng-change="$applyAsync()"
>
  <!-- 如果用ng-repeat生成option,该写法同样生效 -->
</select>

临时兼容方案

如果代码改动成本较高,也可以替换原生<select>为自定义下拉组件,避开原生控件的事件兼容问题。

内容的提问来源于stack exchange,提问作者Maahi Bhat

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.13 07:21:03