ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
[TOC] >[success] # 常用模版语法讲解 1. **v-text 与 {{}}** :用来渲染纯文字 2. **v-html** :用来渲染标签 3. **v-bind**:动态属性 4. **v-once**:元素中的变量只使用一次 5. **v-if** :显示/隐藏重新渲染页面元素 6. **v-show** :显示/隐藏元素,不重新渲染dom元素(display:none,来会切换显示隐藏) 7. **v-on** :定义事件,例如:**click** 之类的 8. **简写形式**:**v-on** 以及 **v-bind** 等等的简写 9. **动态属性**:**动态** 给 **属性名** 或者 **事件名** 赋值 10. **事件修饰符**:**阻止冒泡事件** 等等的一些 **语法糖** >[success] ## v-text 与 {{}} 如果我们想在页面渲染一个 **data** 中的 **变量** ,可以使用 **v-text** 如下: **index.html** ~~~ <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>常用模版语法讲解</title> <!-- 通过cdn方式引入vue --> <script src="https://unpkg.com/vue@next"></script> </head> <body> <div id="root"></div> </body> <script> // 生命周期函数:在谋一时刻会自动执行的函数 const app = Vue.createApp({ data(){ return{ message: 'hello world' } }, template: '<div v-text="message"></div>' }) const vm = app.mount('#root') </script> </html> ~~~ 或者使用 **{{}}** ~~~ <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>常用模版语法讲解</title> <!-- 通过cdn方式引入vue --> <script src="https://unpkg.com/vue@next"></script> </head> <body> <div id="root"></div> </body> <script> // 生命周期函数:在谋一时刻会自动执行的函数 const app = Vue.createApp({ data(){ return{ message: 'hello world' } }, template: '<div>{{message}}</div>' }) const vm = app.mount('#root') </script> </html> ~~~ **v-text** 与 **{{}}** 的区别:**v-text** :**将数据解析为纯文本,不能输出真正的 html** ,与 **花括号** 的区别是在页面加载时不显示 **{{}}** >[success] ## v-html 如果我们想 **动态** 在 **字符串中拼接标签** 并且 **展示在页面上** ,我们可以使用 **v-html** ,如下: **index.html** ~~~ <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>常用模版语法讲解</title> <!-- 通过cdn方式引入vue --> <script src="https://unpkg.com/vue@next"></script> </head> <body> <div id="root"></div> </body> <script> // 生命周期函数:在谋一时刻会自动执行的函数 const app = Vue.createApp({ data(){ return{ message: '<strong>hello world</strong>' } }, template: '<div v-html="message"></div>' }) const vm = app.mount('#root') </script> </html> ~~~ >[success] ## v-bind 如果我们想 **动态给标签添加属性** 时,可以使用 **v-bind** ,代码如下: **index.html** ~~~ <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>常用模版语法讲解</title> <!-- 通过cdn方式引入vue --> <script src="https://unpkg.com/vue@next"></script> </head> <body> <div id="root"></div> </body> <script> // 生命周期函数:在谋一时刻会自动执行的函数 const app = Vue.createApp({ data(){ return{ message: 'hello world' } }, // template: '<div v-bind:title="message">{{message}}</div>' // 或者 // template: '<div :title="message">{{message}}</div>' // 或者可以写一些表达式 template: '<div :title="message">{{ message ? "1" : "0" }}</div>' }) const vm = app.mount('#root') </script> </html> ~~~ >[success] ## v-once **需求** :**只想展示第一次变量中展示的数据**,以后 **变量改变了,页面展示的数据也不跟随改变**,可以使用 **v-once** ,它的意思是 **元素中的变量只使用一次** 。 **index.html** ~~~ <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>常用模版语法讲解</title> <!-- 通过cdn方式引入vue --> <script src="https://unpkg.com/vue@next"></script> </head> <body> <div id="root"></div> </body> <script> // 生命周期函数:在谋一时刻会自动执行的函数 const app = Vue.createApp({ data(){ return{ message: 'hello world' } }, template: '<div v-once>{{message}}</div>' }) const vm = app.mount('#root') </script> </html> ~~~ >[success] ## v-if 应用场景:适用于 **不频繁显示隐藏元素** 的需求,如果 **频繁显示隐藏** ,可使用 **v-show** 。 **index.html** ~~~ <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>常用模版语法讲解</title> <!-- 通过cdn方式引入vue --> <script src="https://unpkg.com/vue@next"></script> </head> <body> <div id="root"></div> </body> <script> // 生命周期函数:在谋一时刻会自动执行的函数 const app = Vue.createApp({ data(){ return{ message: 'hello world', show: true } }, template: '<div v-if="show">{{message}}</div>' }) const vm = app.mount('#root') </script> </html> ~~~ >[success] ## v-show 应用场景:适用于 **频繁显示隐藏** index.html ~~~ <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>常用模版语法讲解</title> <!-- 通过cdn方式引入vue --> <script src="https://unpkg.com/vue@next"></script> </head> <body> <div id="root"></div> </body> <script> // 生命周期函数:在谋一时刻会自动执行的函数 const app = Vue.createApp({ data(){ return{ message: 'hello world', show: true } }, template: '<div v-show="show">{{message}}</div>' }) const vm = app.mount('#root') </script> </html> ~~~ >[success] ## v-on **应用场景**:给元素添加事件时,例如: **给一个元素,添加click事件**,代码如下: **index.html** ~~~ <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>常用模版语法讲解</title> <!-- 通过cdn方式引入vue --> <script src="https://unpkg.com/vue@next"></script> </head> <body> <div id="root"></div> </body> <script> // 生命周期函数:在谋一时刻会自动执行的函数 const app = Vue.createApp({ data(){ return{ message: 'hello world', show: true } }, methods: { handleClick(){ alert('click') } }, template: '<div v-on:click="handleClick">{{message}}</div>' }) const vm = app.mount('#root') </script> </html> ~~~ 这里要注意,**方法 一定要写在 methods** 中。 >[success] ## 简写形式 1. **v-on:click** 可以写成 **@click** 2. **v-bind:title** 可以写成 **:title** >[success] ## 动态属性 **应用场景**:假如说元素身上的 **属性名或者事件名不确定** ,可以用一个 **变量的形式来定义动态定义属性** ,代码如下: **index.htrml** ~~~ <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>常用模版语法讲解</title> <!-- 通过cdn方式引入vue --> <script src="https://unpkg.com/vue@next"></script> </head> <body> <div id="root"></div> </body> <script> // 生命周期函数:在谋一时刻会自动执行的函数 const app = Vue.createApp({ data(){ return{ message: 'hello world', show: true, name: 'title', // 属性名称 event: 'click' // 事件名称 } }, methods: { handleClick(){ alert('click') } }, template: '<div @[event]="handleClick" :[name]="message">{{message}}</div>' }) const vm = app.mount('#root') </script> </html> ~~~ >[success] ## 事件修饰符 **应用场景** :以前 **js 阻止冒泡默认事件** 都用 **event对象** 下的自带方法,例如:**e.preventDefault()** ,现在 **vue** 中有了新的方式 **语法糖** 解决同样问题,代码如下: **index.html** ~~~ <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>常用模版语法讲解</title> <!-- 通过cdn方式引入vue --> <script src="https://unpkg.com/vue@next"></script> </head> <body> <div id="root"></div> </body> <script> // 生命周期函数:在谋一时刻会自动执行的函数 const app = Vue.createApp({ data(){ return{ message: 'hello world', show: true, name: 'title', // 属性名称 event: 'click' // 事件名称 } }, methods: { handleClick(){ alert('click') } }, template: ` <form action="https://www.baidu.com" @click.prevent="handleClick"> <button type="submit">提交</button> </form> ` }) const vm = app.mount('#root') </script> </html> ~~~