is属性可以使html原生标签转化成vue组件
<body>
<script src='https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js'></script>
<div id='myApp'>
在html标签结构中, 有一些特殊标签结构是不能正确渲染的,
例如: p标签中嵌套div, a标签中嵌套a标签, button嵌套button, tabel中嵌套非tr
<p>p <div>div</div> </p>
<a href="#">a1 <a href="#">a2</a> </a>
<button>button1 <button>button2</button> </button>
<table> <span>span</span> </table>
以上标签结构在渲染时,会产生结构错乱, 不按照书写的结构渲染, 详见查看器 <br>
所以如果子组件和父组件标签结构不匹配时,会造成渲染异常, 如下所示
<table>
<my-com v-for="item in 3"></my-com>
</table>
<!-- 此时我们把myCom中的根标签换成tr, tr依然被渲染到tabel外了,
原因: 标签渲染之前存在两个解析过程 1, 浏览器内核先把标签结构解析到缓存,再次过程中判断标签结构是否符合要求, 2, vue内核把组件结构解析成组件模板中的标签结构, 解析1早于解析2, 浏览器先把my-com移出tabel, 然后vue把my-com解析成tr -->
<!-- 解决: tabel中暂时先写tr, 经过第一步解析,浏览器会把tr保留在tabel内, 第二步解析, vue内核会通过is属性把tr装化成目标组件myCom -->
<table>
<tr is="my-com" v-for="item in 3"></tr>
</table>
<div is="my-com"></div>
</div>
<!-- 组件模板 -->
<template id='myTem'>
<tr>
<td>a</td>
<td>b</td>
<td>c</td>
</tr>
</template>
<script>
Vue.component('myCom', {
template: '#myTem',
data(){
return{
}
}
})
new Vue({
el: '#myApp',
data: {
},
methods: {
}
})
</script>
</body>