
一、Vue 实例的 template
在前面的文章中,我们都是把 HTML 结构放在 template
属性中;在 Vue 的语法中 template
就是用于定义组件模板的选项,描述组件的结构和布局。
我们可以像前面的文章一样把 HTML 代码放在 createApp
方法的参数对象的 template
属性中,作为 template
的属性值:
js
const app = Vue.createApp({
template: `
<h2>计数器 {{counter}}</h2>
<button v-on:click="increment">+1</button>
<button v-on:click="decrement">-1</button>
`,
data: function(){
return {
counter: 0
}
},
methods: {
increment: function(){
this.counter++
},
decrement: function(){
this.counter--
}
},
})
app.mount('#app')
template
选项声明的 HTML 结构会完全替换掉 div#app
中的内容,我们可以来给 div#app
中增加一些内容,创建一个 HTML 页面,内容如下:
html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<div id="app">
<div>div#app中原本的内容</div>
</div>
<script src="../lib/vue.js"></script>
</body>
</html>
使用 LiverServer 打开 HTML 页面:

在 HTML 中增加上述的 JS 代码,再次刷新页面

可以看到 div#app
中原有的内容全部被 template
选项声明的 HTML 结构替换掉了。
但是如果 HTML 结构比较庞大,会造成大量的 HTML 代码堆积在 script
标签的 JS 代码中,不好维护,通常我们会把 template
声明的 HTML 结构放在 body
标签,可以将上述代码改成如下形式:
html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<div id="app">
<h2>计数器 {{counter}}</h2>
<button @click="increment">+1</button>
<button @click="decrement">-1</button>
</div>
<script src="../lib/vue.js"></script>
<script>
const app = Vue.createApp({
data: function(){
return {
counter: 0
}
},
methods: {
increment: function(){
this.counter++
},
decrement: function(){
this.counter--
}
},
})
app.mount('#app')
</script>
</body>
</html>

createApp
方法传入的对象参数中没有 template
属性,默认就会渲染 div#app
里面的内容。
Vue 语法中,template
是 Vue 实例的一个配置选项,其类型可以是字符串、函数或者返回字符串的函数,在 template
中我们可以使用包含插值表达、指令如 v-for、v-model 等
以及其他 Vue 模板语法。
在之后的 Vue 组件化开发中 template
有着非常重要的作用:
-
定义组件的结构:
template
用于描述组件的HTML结构,包括元素、样式、布局等。这允许开发者以一种更模块化、可复用的方式构建用户界面。html<template> <div> <h1>{{ title }}</h1> <p>{{ content }}</p> </div> </template>
-
支持动态数据绑定: 在
template
中可以使用插值表达式({{ expression }}
)、指令(如v-bind
、v-for
、v-if
等)等Vue模板语法,从而实现对数据的动态绑定。html<template> <div> <h1>{{ title }}</h1> <ul> <li v-for="item in items">{{ item }}</li> </ul> </div> </template>
-
提高代码可读性: 通过将模板从 JavaScript 代码中分离出来,使得代码更加清晰、易读。
template
允许开发者专注于组件的外观和结构,而不必在 JavaScript 中嵌入大段的 HTML 代码。html<template> <div> <!-- 清晰可读的模板结构 --> <h1>{{ title }}</h1> <p>{{ content }}</p> </div> </template>
-
提供单文件组件支持: 在实际项目中,通常使用单文件组件(.vue文件),该文件中包含了模板、脚本和样式。
template
是其中的一部分,用于定义组件的 HTML 结构。html<!-- MyComponent.vue --> <template> <div> <h1>{{ title }}</h1> <p>{{ content }}</p> </div> </template> <script> export default { data() { return { title: 'Vue Component', content: 'This is a Vue component.' }; } }; </script> <style scoped> /* 样式定义 */ </style>
template
在Vue的组件化开发中扮演着定义组件外观的重要角色,使得我们可以更加灵活地构建用户界面,并且提高了代码的可维护性和可读性。
template
是 Vue 语法中 Options API
中的 Options: Rendering
模块的语法,类似的还有 插槽 slot
等。
Options:Rendering
是指 Vue 实例的一系列选项,用于配置渲染相关的行为。这些选项影响Vue组件的渲染过程,包括模板的编译、虚拟DOM的生成和更新、渲染函数的执行等。
