Vue是怎么渲染template內(nèi)的標(biāo)簽內(nèi)容的?
我們在使用Vue做項目時,都會用到腳手架,相應(yīng)的我們會在template寫標(biāo)簽內(nèi)容。那么你知道為什么會在template寫標(biāo)簽嗎?這當(dāng)中經(jīng)過了怎樣的處理呢?
<template>
<div id="app">
<div id="nav">
</div>
<router-view/>
</div>
</template>
<style lang="less">
</style>
其實Vue在處理template時,是經(jīng)過這樣處理的,它是通過內(nèi)置的render方法處理我們輸入的標(biāo)簽,生成VNodes。下面我注釋了template內(nèi)的代碼,你可以先看下效果,然后注釋掉render方法內(nèi)的內(nèi)容,取消注釋template。看下前后效果是否一樣。
<!DOCTYPE html>
<html>
<head>
<title>render</title>
</head>
<style type="text/css">
#text{
font-weight: bold;
font-size: 26px;
}
</style>
<body>
<div id="app">
</div>
</body>
<script type="text/javascript" src="https://unpkg.com/vue@2.6.11/dist/vue.js"></script>
<script type="text/javascript">
const vm = new Vue({
el:'#app',
data: {
text: 'hello world',
style1: {
width: '200px',
height: '200px',
border: '1px solid red'
},
style2: {
textAlign: 'center'
},
colorText: {
color:'blue'
}
},
// template:`<div :style='style1'>
// <p :style='style2'>
// <span :style='colorText' @click='cli()' id='text'>{{text}}</span>
// </p>
// </div>`,
// methods:{
// cli(){
// alert(1)
// }
// },
render(createElement) {
return createElement('div', {
style: this.style1
}, [
createElement('p', {
style: this.style2
}, [createElement('span', {
style: this.colorText,
attrs:{
id:'text'
},
on:{
click:()=>{
alert(1)
}
}
}, this.text)])
])
}
})
</script>
</html>
作者:Vam的金豆之路
主要領(lǐng)域:前端開發(fā)
我的微信:maomin9761
微信公眾號:前端歷劫之路