如何在Ionic 4中使用forEach?Ionic v1升级至v4代码迁移问题
解决Ionic 4中
Cannot find name 'angular'报错的forEach改写方案 这个报错是Ionic版本升级后的典型问题——Ionic 4基于Angular 2+构建,而Angular 2+已经彻底移除了AngularJS(Ionic 1的基础)里的全局angular对象,所以angular.forEach自然找不到了。咱们直接把这段代码改成符合现代JS/Angular规范的写法就行,同时还要注意this的指向问题,原代码里的普通函数回调会改变this上下文,用箭头函数就能完美解决。
改写方案1:数组原生forEach+箭头函数
这是最贴近原代码逻辑的写法,替换掉angular.forEach,同时用箭头函数保留组件上下文的this:
this.selectedQuestion.answers.forEach((ans) => { if (ans.id === answerPassed.id) { this.selectedQuestion.selectedAns = answerPassed.id; } else { ans.value = false; } });
- 直接调用数组的
forEach方法,不再依赖angular全局对象 - 箭头函数
=>会继承外层的this,所以this.selectedQuestion能正确访问到组件中的属性 - 把
==换成===是严格相等的最佳实践,避免隐式类型转换带来的意外问题
改写方案2:for...of循环
如果觉得forEach的写法不够直观,也可以用ES6的for...of循环,可读性更强:
for (const ans of this.selectedQuestion.answers) { if (ans.id === answerPassed.id) { this.selectedQuestion.selectedAns = answerPassed.id; } else { ans.value = false; } }
额外提醒
执行这段代码前,要确保this.selectedQuestion和answerPassed都已经被正确初始化,避免出现Cannot read property 'answers' of undefined这类额外报错。
内容的提问来源于stack exchange,提问作者user9088454
相关产品推荐
相关产品推荐

