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

如何将Vue.js数据绑定到动态追加的div元素中

问题原因

你直接用jQuery动态插入的带{{}}模板语法的字符串不会被Vue识别:Vue的模板编译仅在实例初始化阶段对已挂载DOM内的模板进行解析处理,运行时动态插入的未编译模板字符串不会被自动处理,所以{{}}表达式不会生效。


解决方案1:推荐 数据驱动实现(符合Vue设计思想)

完全不需要用jQuery操作DOM,通过控制响应式变量决定元素是否渲染,天然支持响应式绑定,全程使用原生div实现:

修改后HTML代码

<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.17/vue.js"></script>
<div id="app">
  <h2>Todos:</h2>
 <button v-on:click="handleTileClick">
 Click Me
 </button>
 <div id="fox">
   <!-- 用v-if控制动态元素的显示,直接写模板语法即可生效 -->
   <div v-if="showPopover" id="popover-dialog"> data here {{chocs[0].title}}</div>
 </div>
</div>

修改后JS代码

new Vue({
  el: "#app",
  data: {
    chocs:[{"title":'a man tale'},{"title":'a boy tale'}],
    showPopover: false // 控制弹窗是否显示的响应式变量
  },
  methods: {
    handleTileClick: function(){
      alert(this.chocs[0].title);
      this.showPopover = true // 修改变量触发元素渲染,无需操作DOM
    },
  }
})

如果需要点击一次追加一个新的元素而非仅显示一个,可以把v-if换成v-for绑定一个数组,点击时往数组里加元素即可。


解决方案2:必须动态插入DOM场景 手动编译模板

如果确实有需求要运行时动态插入DOM,可以使用Vue的手动编译能力实现响应式绑定:

new Vue({
  el: "#app",
  data: {
    chocs:[{"title":'a man tale'},{"title":'a boy tale'}]
  },
  methods: {
    handleTileClick: function(){
      alert(this.chocs[0].title);
      // 创建组件构造器
      const DialogComponent = Vue.extend({
        template: `<div id="popover-dialog"> data here {{chocs[0].title}}</div>`,
        data: () => ({
          chocs: this.chocs // 绑定当前实例的响应式数据
        })
      })
      // 挂载组件生成DOM
      const dialogInstance = new DialogComponent().$mount()
      // 插入到指定容器
      document.getElementById('fox').appendChild(dialogInstance.$el)
    },
  }
})

临时方案(无响应式)

如果你不需要后续数据更新同步到新增的div里,直接在模板字符串里拼接变量值即可,不需要用{{}}语法:

$("#fox").append(`<div id="popover-dialog"> data here ${this.chocs[0].title}</div>`);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 02:27:04