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

使用jQuery append插入Vuetify组件不显示问题求助

问题分析与解决方案

你遇到的核心问题是用jQuery直接操作DOM插入Vuetify组件,完全绕过了Vue的响应式系统。Vue在初始化时会编译模板,解析组件、指令(如v-model、@click)并建立数据绑定,但jQuery动态插入的HTML内容不会被Vue重新编译,所以Vuetify组件无法被正确初始化,指令也不会生效,和“重启Vuetify”无关。

正确的做法是用Vue的数据驱动视图思想,通过响应式数组管理卡片列表,让Vue自动渲染DOM。

修改后的实现代码

模板部分

<div id="app">
  <!-- 原表单(用于添加新卡片) -->
  <v-form ref="form" lazy-validation>
    <!-- 保留你原来的表单输入,比如name、颜色选择器等 -->
    <v-btn color="success" @click="createList">创建卡片</v-btn>
  </v-form>

  <!-- 用v-for渲染卡片列表 -->
  <div id="lists" class="d-flex flex-wrap">
    <v-card 
      v-for="(card, index) in cards" 
      :key="index"
      width="374" 
      class="mx-10 my-12" 
      elevation="5"
    >
      <v-system-bar :color="card.color.hexa" dark>
        <b>{{ card.name }}</b>
      </v-system-bar>
      <v-form lazy-validation>    
        <v-card-actions>
          <v-text-field 
            v-model="card.title" 
            class="mx-5" 
            :rules="jobsTitleRules" 
            label="Title" 
            required
          ></v-text-field>
          <v-btn color="success" @click="addTitle(index)">Add</v-btn>
        </v-card-actions>
        <ul style="padding: 0px;">
          <li v-for="(job, jobIndex) in card.jobs" :key="jobIndex">{{ job }}</li>
        </ul>
      </v-form>
    </v-card>
  </div>
</div>

JavaScript部分

new Vue({
  el: '#app',
  vuetify: new Vuetify(),
  data() {
    return {
      // 原表单输入数据
      name: '',
      color: { hexa: '#1976d2' },
      jobsTitleRules: [
        v => !!v || '标题不能为空',
        v => v.length <= 20 || '标题不能超过20个字符'
      ],
      // 响应式数组,存储所有卡片的独立数据
      cards: []
    }
  },
  methods: {
    createList() {
      if (this.$refs.form.validate()) {
        // 将新卡片数据推入数组,Vue自动渲染新组件
        this.cards.push({
          name: this.name,
          color: { ...this.color }, // 复制对象避免引用共享
          title: '',
          jobs: [] // 每个卡片独立的任务列表
        })
        // 清空原表单输入
        this.name = ''
      }
    },
    addTitle(index) {
      const targetCard = this.cards[index]
      if (targetCard.title) {
        // 用数据驱动添加任务项
        targetCard.jobs.push(targetCard.title)
        targetCard.title = ''
      }
    }
  }
})

关键说明

  • 用v-for遍历响应式数组渲染卡片,数组更新时Vue自动处理DOM,所有Vuetify组件和指令都会被正确编译初始化。
  • 每个卡片的v-model绑定到自身对象的属性,彻底解决多卡片共享数据的问题。
  • 完全抛弃jQuery操作DOM的方式,所有视图更新都通过修改响应式数据实现,这是Vue开发的核心原则。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 20:41:08