AngularJS 1.5.9选择视频文件时ng-model无法正常更新的问题
AngularJS 1.5 环境下ng-file-upload视频上传模型置空的排障步骤
- 首先修正
ngf-accept的传参语法,对照可正常运行的图片上传代码:你当前视频input的ngf-accept写法是ngf-accept="video/mp4,video/x-m4v,video/*",没有用单引号把匹配规则包裹成字符串。ng-file-upload的ngf-accept参数需要传入字符串类型的文件匹配规则,未加单引号时框架会把整段内容解析为JS表达式,逗号分隔的多个MIME值会被错误运算成无意义的规则值,直接导致文件校验不通过、绑定模型被置空。这种规则非法的场景下,框架不会触发ngf-model-invalid的绑定逻辑(因为根本没有生成无效文件对象),这也是你就算加了ngf-model-invalid="invalidFile"也始终拿不到值的核心原因。正确写法应该和图片代码保持一致,给规则加上单引号:ngf-accept="'video/mp4,video/x-m4v,video/*'" - 排查
ngf-validate的大小阈值兼容问题,当前写法是ngf-validate="{size: {max: '200MB'}}",适配Angular 1.5.9的早期版本ng-file-upload存在单位换算bug:对超过100MB的大小阈值会解析失败,直接判定文件校验不通过、清空绑定模型。可以临时把max值替换为字节数写法ngf-validate="{size: {max: 209715200}}"做对比测试,如果修改后能正常获取文件对象,就是单位解析的版本兼容问题。 - 逐次剥离校验规则定位失效点:临时移除视频input上所有
ngf-accept、ngf-validate指令,只保留基础的ngf-select和ng-model绑定,测试选中视频时是否能正常更新模型。如果基础绑定可用,就逐一把校验规则加回,定位到具体触发模型清空的规则项。 - 排查后置逻辑的模型覆盖问题:部分旧页面逻辑会在文件选中事件触发后,根据文件类型判断,对非图片类的上传字段执行强制清空操作。可以在视频input上加
ngf-change="$ctrl.logSelectedFile($file)"监听文件选中事件,在对应的控制器方法里打印拿到的文件对象,如果事件里能拿到文件、但绑定模型最终为空,就是页面后置逻辑覆盖了模型值。
内容的提问来源于stack exchange,提问作者Sdupont
相关产品推荐
相关产品推荐

