vue3中自定义元素交互的非兼容变更

vue3中自定义元素交互的非兼容变更

自主定制元素

如果我们先添加在Vue外部定义的自定义元素,如使用Web组件API,我们需要指示Vue将其视为自定义元素:


// 在2.x中,将标记作为自定义元素白名单是通过Vue.config.ignoredElements
// 这将使Vue忽略在Vue外部定义的自定义元素
// (例如:使用 Web Components API)
Vue.config.ignoredElements = ['plastic-button']
// 在Vue3中,此检查在模板编译期间执行指示编译器将视为自定义元素
// 如果使用生成步骤:将 isCustomElement 传递给 Vue 模板编译器,如果使用 vue-loader,则应通过 vue-loader 的 compilerOptions 选项传递:
// webpack配置
rules: [
  {
    test: /\.vue$/,
    use: 'vue-loader',
    options: {
      compilerOptions: {
        isCustomElement: tag => tag === 'plastic-button'
      }
    }
  }
  // ...
]
// 如果使用动态模板编译,请通过 app.config.isCustomElement 传递
// 运行时配置只会影响运行时模板编译——它不会影响预编译的模板。
const app = Vue.createApp({})
app.config.isCustomElement = tag => tag === 'plastic-button'

定义内置元素

自定义元素规范提供了一种将自定义元素用作自定义内置模板的方法,方法是向内置元素添加 is 属性:

Vue对is特殊prop的使用是在模拟native attribute在浏览器中普遍可用之前的作用,但是在2.x中,它被解释为一个名为plastic-button的Vue组件,浙江组织上面提到的自定义内置元素的原生使用
在3.0中,Vue对is属性的特殊处理被限制到标签上
在保留的 tag 上使用时,它的行为将与 2.x 中完全相同

  • 在普通组件上使用时,他的行为将类似于普通prop

在vue2中,将会渲染bar组件
在vue3中,会通过is属性渲染foo组件
  • 在普通元素上使用时,它将作为is选项传递给createElement调用,并作为原生属性渲染

在vue2中,渲染plastic-button组件
在vue3中,渲染原生button:
document.createElement('button', { is: 'plastic-button' })

v-is用于DOM内模板解析解决方案

仅影响直接在页面的 HTML 中写入 Vue 模板的情况,在 DOM 模板中使用时,模板受原生 HTML 解析规则的约束


你可能感兴趣的:(vue3中自定义元素交互的非兼容变更)