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

Vue3 ESM CDN引入场景下v-bind绑定data-*属性失效问题排查

问题分析与解决方案

哦,我知道问题出在哪了!你把v-bind指令写在了Vue挂载的目标元素本身的属性上,而Vue只会编译这个元素内部的内容,不会处理元素自身的属性。

问题根源

看你的代码,你把v-bind:data-test="test"直接加在了<div id="idpartenaire">上——这个元素是你用.mount('#idpartenaire')指定的挂载目标。Vue在挂载时,会把这个元素的innerHTML当作模板来编译,但不会解析元素自身的属性,所以那个v-bind指令就原封不动地留在了DOM里,而内部的{{ id }}因为是innerHTML的一部分,所以被正常解析了。

修复方法

有两种简单的修复方式:

  • 方法一:将绑定移到内部元素
    把v-bind:data-test放到挂载目标内部的元素上,这样Vue会正常编译这个指令:

    <script type="module">
      import { createApp } from 'https://unpkg.com/vue@3/dist/vue.esm-browser.js'
      const idPartenaire = createApp({
        data() {
          return { id: 2222, test:"un_test" }
        }
      }).mount('#idpartenaire')
    </script>
    <div id="idpartenaire">
      <div :data-test="test">ID du partenaire : {{ id }}</div>
    </div>
    

    这里用了Vue的语法糖:data-test代替v-bind:data-test,两者效果完全一致。

  • 方法二:使用template选项定义完整模板
    在Vue应用的配置中添加template选项,把包含绑定属性的完整元素写进去,Vue会编译整个模板并替换掉挂载目标:

    <script type="module">
      import { createApp } from 'https://unpkg.com/vue@3/dist/vue.esm-browser.js'
      const idPartenaire = createApp({
        data() {
          return { id: 2222, test:"un_test" }
        },
        template: `<div id="idpartenaire" :data-test="test">ID du partenaire : {{ id }}</div>`
      }).mount('#idpartenaire')
    </script>
    <div id="idpartenaire"></div>
    

    注意此时挂载目标元素可以是空的,因为Vue会用template里的内容替换它。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.27 15:42:33