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

Vue.js中如何在forEach循环内访问this.variable变量?

解决Vue中forEach循环里访问this实例变量的问题

你碰到的核心问题是普通函数作为forEach回调时,this的指向发生了改变——这里的this不再指向Vue组件实例,而是指向了全局对象(浏览器环境下是window),所以自然没法访问到this.names。下面给你三种常用的解决办法:

方法1:使用箭头函数(最推荐)

箭头函数不会绑定自己的this,它会继承外层作用域的this,也就是Vue组件实例的this。修改你的forEach回调即可:

printNames: function () {
  let tempData = JSON.parse(JSON.stringify(this.nameData))
  tempData.biglist.forEach((nObj) => { // 这里改成箭头函数
    let cName = nObj.CeName
    console.log(cName)
    this.names = cName // 现在this就指向Vue实例了
  })
}

方法2:提前保存Vue实例的this

在forEach之前把组件实例的this存到一个变量里(比如self或者vm),然后在回调里用这个变量访问实例属性:

printNames: function () {
  let self = this // 保存Vue实例的this
  let tempData = JSON.parse(JSON.stringify(this.nameData))
  tempData.biglist.forEach(function (nObj) {
    let cName = nObj.CeName
    console.log(cName)
    self.names = cName // 用self代替this
  })
}

方法3:利用forEach的第二个参数指定this

forEach方法本身支持第二个参数,用来指定回调函数执行时的this指向,直接传入组件实例的this就行:

printNames: function () {
  let tempData = JSON.parse(JSON.stringify(this.nameData))
  // 第二个参数传入this,指定回调里的this指向Vue实例
  tempData.biglist.forEach(function (nObj) {
    let cName = nObj.CeName
    console.log(cName)
    this.names = cName
  }, this)
}

额外提醒

你当前的代码里,每次循环都会把this.names覆盖成当前的cName,最后页面上只会显示最后一个名称。如果要展示所有名称,建议把names改成数组,比如:

// 初始化数据改成数组
var initData = { names: [] }

// 循环里push进去
this.names.push(cName)

// 模板里可以这样展示
<li>{{ names.join(', ') }}</li>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 08:22:37