举报投诉联系我们 手机版 热门标签 VUE中文网
您的位置:VUE中文网 > vue给元素添加自定义属性 Vue 3.0 自定义元素交互

vue给元素添加自定义属性 Vue 3.0 自定义元素交互

2023-02-26 02:17 VUE3教程

vue给元素添加自定义属性 Vue 3.0 自定义元素交互

vue给元素添加自定义属性

Vue.js 是一个构建用户界面的框架,它允许开发者使用 HTML 模板来创建动态的 Web 应用程序。Vue.js 允许开发者在 HTML 元素上添加自定义属性,以便在应用程序中使用这些属性。

Vue.js 使用 v-bind 指令来绑定 HTML 元素上的自定义属性。v-bind 指令允许开发者将 JavaScript 表达式作为参数传递给 v-bind,从而将 JavaScript 表达式的值作为 HTML 元素的属性。例如:

<div v-bind:my-attribute="myAttributeValue"></div>

在上面的代码中,v-bind:my-attribute 用于将 myAttributeValue 作为 div 元素的 my-attribute 属性。此外,v-bind 还允许开发者使用 JavaScript 表达式作为参数传递:

<div v-bind:[myAttribute]="myAttributeValue"></div> 

在上面的代码中,[myAttribute] 由 JavaScript 表达式 myAttribute 生成,该表达式返回一个字符串(即 myAttribute 的值)。此外,v-bind 还允许将对象字面量作为参数传递:

 
 <div v-bind="{ 'myAttribute': myAttributeValue }"></div> 
 

在上面的代码中,{ 'myAttribute': myAttributeValue } 是一个对象字面量,它包含一个名为 myAttribute 的属性并将其值分配为 myAttributeValue。最后,v-bind 还允许将数组字面量作为参数传递:

 
 <div v-bind="[ 'myAttribute', myAttributeValue ]"></div> 
 

在上面的代码中,[ 'myAttribute', myAttributeValue ] 是一个数组字面量。该数组包含一个字符串 (即 'myAttribte') 和一个 JavaScript 表达式 (即 myAttribteValue)。因此 Vue.js 通过 v-bind 指令允许开发者在 HTML 元素上添加任意数量的、任意样式的、任意内容的、任意名字的、任意衍生函数 (如 JavaScript 表达式) 的、任意对应函数 (如对象字面量) 的、以及任意形成函数 (如数组字面量) 的 HTML 属性。

#概览

  • 非兼容:自定义元素白名单现在在模板编译期间执行,应该通过编译器选项而不是运行时配置来配置。
  • 非兼容:特定 is prop 用法仅限于保留的 <component> 标记。
  • 新增:有了新的 v-is 指令来支持 2.x 用例,其中在原生元素上使用了 v-is 来处理原生 HTML 解析限制。

#自主定制元素

如果我们想添加在 Vue 外部定义的自定义元素 (例如使用 Web 组件 API),我们需要“指示”Vue 将其视为自定义元素。让我们以下面的模板为例。

<plastic-button></plastic-button>

#2.x 语法

在 Vue 2.x 中,将标记作为自定义元素白名单是通过 Vue.config.ignoredElements

// 这将使Vue忽略在Vue外部定义的自定义元素
// (例如:使用 Web Components API)


Vue.config.ignoredElements = ["plastic-button"]

#3.x 语法

在 Vue 3.0 中,此检查在模板编译期间执行指示编译器将 <plastic-button> 视为自定义元素:

  • 如果使用生成步骤:将 isCustomElement 传递给 Vue 模板编译器,如果使用 vue-loader,则应通过 vue-loadercompilerOptions 选项传递:

  // 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 属性:

<button is="plastic-button">点击我!</button>

Vue 对 is 特殊 prop 的使用是在模拟 native attribute 在浏览器中普遍可用之前的作用。但是,在 2.x 中,它被解释为渲染一个名为 plastic-button 的 Vue 组件,这将阻止上面提到的自定义内置元素的原生使用。

在 3.0 中,我们仅将 Vue 对 is 属性的特殊处理限制到 <component> tag。

  • 在保留的 <component> tag 上使用时,它的行为将与 2.x 中完全相同;

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

  <foo is="bar" />

  • 2.x 行为:渲染 bar 组件。
  • 3.x 行为:通过 is prop 渲染 foo 组件。

  • 在普通元素上使用时,它将作为 is 选项传递给 createElement 调用,并作为原生 attribute 渲染,这支持使用自定义的内置元素。

  <button is="plastic-button">点击我!</button>

  • 2.x 行为:渲染 plastic-button 组件。

  • 3.x 行为:通过回调渲染原生的 button。

    document.createElement("button", { is: "plastic-button" })

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

提示:本节仅影响直接在页面的 HTML 中写入 Vue 模板的情况。 在 DOM 模板中使用时,模板受原生 HTML 解析规则的约束。一些 HTML 元素,例如 <ul&<ol&<table&<select& 对它们内部可以出现的元素有限制,和一些像 <li&<tr&,和 <option& 只能出现在某些其他元素中。

#2x 语法

在 Vue 2 中,我们建议通过在原生 tag 上使用 is prop 来解决这些限制:

<table>
  <tr is="blog-post-row"></tr>
</table>

#3.x 语法

随着 is 的行为变化,我们引入了一个新的指令 v-is,用于解决这些情况:

<table>
  <tr v-is=""blog-post-row""></tr>
</table>

WARNING

v-is 函数像一个动态的 2.x :is 绑定——因此,要按注册名称渲染组件,其值应为 JavaScript 字符串文本:

<!-- 不正确,不会渲染任何内容 -->
<tr v-is="blog-post-row"></tr>


<!-- 正确 -->
<tr v-is=""blog-post-row""></tr>

#迁移策略

  • 替换 config.ignoredElementsvue-loadercompilerOptions (使用 build 步骤) 或 app.config.isCustomElement (使用动态模板编译)
  • 将所有非 <component> tags 与 is 用法更改为 <component is="..."> (对于 SFC 模板) 或 v-is (对于 DOM 模板)。
阅读全文
以上是VUE中文网为你收集整理的vue给元素添加自定义属性 Vue 3.0 自定义元素交互全部内容。
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。
相关文章
© 2024 VUE中文网 vue88.com 版权所有 联系我们