vue.js:<component :is="comp-name"/> 之间有什么区别?和<div:is="comp-name"/> [英] vue.js: what's the difference between <component :is="comp-name"/> and <div :is="comp-name"/>?

查看:34
本文介绍了vue.js:<component :is="comp-name"/> 之间有什么区别?和<div:is="comp-name"/>的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

在vue中使用动态组件时,我们可以使用component或者div等html标签作为标签名:

或:

//假设comp-name的根标签是div<div :is="comp-name"></div>

那么这两种方式有什么区别呢?一样吗?

解决方案

is" 属性不是特定于 Vue 的,它来自自定义元素规范.

另见什么是HTML是"?属性?

但显然 Vue 必须自己实现它以进行编译,模仿自定义元素规范.

在您展示的示例中,我想这无关紧要,因为在这两种情况下,标记(

)都将被替换通过 Vue 组件实例.这是使用 is 属性在几个可能的组件(动态组件")之间切换的典型情况.

然而,当您尝试在一些限制它们可以拥有的子元素类型的 HTML 元素中使用自定义元素/Vue 组件(带有运行时编译)时,它开始变得重要,如 DOM 模板解析注意事项 Vue 指南部分:

<块引用>

一些 HTML 元素,例如

      对哪些元素可以出现在其中有限制,一些元素如
    1. <;option> 只能出现在某些其他元素中.

      在这些情况下,is 属性可能不会(仅)用于在动态组件之间切换,而是为了遵守 HTML 限制(以避免浏览器对我们的自定义组件做出意外行为)同时仍会在稍后由我们的自定义组件替换它们.

      这是一个带有

      的快速演示:

      Vue.component('my-row', {模板:'#我的行',});新的 Vue({el: '#app',});

      td,第 {边框:1px纯黑色;}

      <script src="https://unpkg.com/vue"></script><div id="应用程序"><table id="table1"><tr><第>表</第>;<td>1</td></tr><!-- 下面的自定义组件将从表格中剥离出来.确切结果可能因浏览器而异 --><我的行></我的行>
      <小时/><table id="table2"><tr><第>表</第>;<td>2</td></tr><!-- 有效的 TR 行将被自定义组件正确替换 --><tr is="my-row"></tr>

<模板 id="我的行"><tr><th>标题</th><td>细胞</td></tr></template>

结果: