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

Vue应用v-if中使用Array.includes报无法读取undefined属性问题

问题根因

你遇到的报错是testArray的定义和作用域错误导致的,有三处核心问题:

  1. testArray没有在Vue实例的data选项中声明,不属于响应式属性,模板无法直接访问
  2. 你在checkTier函数中用let声明的testArray是函数局部变量,后续用this.testArray访问时实例上根本不存在该属性,最终模板读取到的testArray是undefined,调用includes自然会报错
  3. 额外错误:checkTier方法没有放在Vue的methods配置项中,无法被组件的input事件正常触发
修复方案

方案1:按你原有逻辑修改

修改JS代码

new Vue({
  el: "#app",
  components: {Multiselect: window.VueMultiselect.default},
  data: {
    tiers:[
      {name: "test tier"}
    ],
    selectedTier: [],
    values: [
      {name: "adam", tier: "test tier"},
      {name: "sam", tier:"none"}
    ],
    // 新增:在data中声明响应式属性testArray
    testArray: []
  },
  // 新增:将自定义方法放入methods配置项
  methods: {
    checkTier(){
      // 每次更新前清空旧数据,避免历史值残留
      this.testArray = []
      this.selectedTier.forEach(fields => {
        this.testArray.push(fields.name);
      });
    }
  }
})

HTML代码无需修改,原有v-if="testArray.includes(value.tier)"可正常运行。

方案2:更简洁的优化方案(推荐)

无需手动维护testArray和绑定input事件,直接用计算属性自动同步选中值:

new Vue({
  el: "#app",
  components: {Multiselect: window.VueMultiselect.default},
  data: {
    tiers:[
      {name: "test tier"}
    ],
    selectedTier: [],
    values: [
      {name: "adam", tier: "test tier"},
      {name: "sam", tier:"none"}
    ]
  },
  computed: {
    // 计算属性会自动跟随selectedTier的变化实时更新
    testArray() {
      return this.selectedTier.map(item => item.name)
    }
  }
})

同时删除Multiselect组件上的@input="checkTier"绑定即可,逻辑更简洁,也不会出现变量作用域类错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 02:54:05