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

Vue3(3.3.8)结合Tagify(4.17.9)使用v-model报错的解决方法

Vue3 集成 Tagify 报错解决方法

你遇到的报错核心原因是:Vue3 中组件的 prop 是只读属性,不能直接用 v-model 绑定。v-model 本质是 v-bind:value 加 v-on:input 的语法糖,会尝试修改绑定变量,但组件内部不允许直接修改 prop,因此触发了这个错误。

以下是具体的修复方案:

1. 修复 textarea 的绑定问题

把原来直接用 v-model 绑定 prop 的代码:

<textarea v-if="mode === 'textarea'" v-model="value"/>

替换为拆分后的绑定写法,通过事件通知父组件更新数据:

<textarea v-if="mode === 'textarea'" :value="value" @input="$emit('update:value', $event.target.value)"/>

2. 处理 Tagify 输入框的双向同步

因为 Tagify 会封装原生 input,需要监听其自身事件来同步值,完整组件示例如下:

<template>
  <textarea v-if="mode === 'textarea'" :value="value" @input="handleTextareaInput" />
  <input v-else :value="value" ref="tagifyInput" />
</template>

<script setup>
import { ref, onMounted, watch } from 'vue'
import Tagify from '@yaireo/tagify'

// 定义组件接收的 props
const props = defineProps({
  value: {
    type: String,
    default: ''
  },
  mode: {
    type: String,
    default: 'input'
  }
})

// 定义用于通知父组件更新的事件
const emit = defineEmits(['update:value'])

const tagifyInput = ref(null)
let tagifyInstance = null

// 处理 textarea 输入事件
const handleTextareaInput = (e) => {
  emit('update:value', e.target.value)
}

onMounted(() => {
  // 仅在非 textarea 模式下初始化 Tagify
  if (props.mode !== 'textarea' && tagifyInput.value) {
    tagifyInstance = new Tagify(tagifyInput.value, {
      // 这里添加你的 Tagify 配置项,比如分隔符、最大标签数等
      delimiters: ',',
      maxTags: 10
    })

    // 监听 Tagify 的 change 事件,同步值到父组件
    tagifyInstance.on('change', (event) => {
      const newValue = event.detail.value.map(tag => tag.value).join(',')
      emit('update:value', newValue)
    })
  }
})

// 监听父组件传入的 value 变化,同步更新 Tagify 实例
watch(() => props.value, (newValue) => {
  if (tagifyInstance) {
    tagifyInstance.loadOriginalValues(newValue)
  }
})
</script>

3. 父组件使用方式

父组件中依然可以用 v-model 绑定你的 Tagify 组件,因为我们实现了 update:value 事件,Vue 会自动识别并完成双向绑定:

<Tagify v-model="tags" mode="input" />

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 15:26:25