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

Vue使用$emit父子传值时数组长度首次点击不更新计数错误

问题根因

子组件的事件触发顺序有误:你将action方法绑定到了span的click事件上,点击时会先执行action方法向父组件传值,此时checkbox的v-model还未完成checkedBrands的更新,因此第一次emit给父组件的是修改前的旧值,等click事件执行完成后v-model才会更新数据,就出现了计数滞后一次的现象。

解决方案(二选一即可,推荐第一种)

  • 方案1:将事件绑定到checkbox的@change事件上(change事件会在checkbox值更新完成后触发,拿到的永远是最新值)
    子组件模板修改为:
    <label class='custom-checkbox'>
     <input type='checkbox' :value='item.title' v-model='checkedBrands' @change="action">
     <span>{{ item.title }}</span>
    </label>
    
    原有action方法无需修改。
  • 方案2:在action方法中添加$nextTick,等待数据更新完成后再传值
    子组件action方法修改为:
    action() {
      this.$nextTick(() => {
        this.$emit('action', this.checkedBrands);
      })
    }
    

修改后首次点击即可获取到最新的数组值,父组件{{ checkedBrands.length }}就会正常更新。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 05:15:02