为了快速熟悉Vue
,学习下互动教程。
早上出门有事情,没学完,学到哪算哪
互动教程(Vue3)
声明式渲染
Vue 的核心功能是声明式渲染:通过扩展于标准 HTML 的模板语法,我们可以根据 JavaScript 的状态来描述 HTML 应该是什么样子的。当状态改变时,HTML 会自动更新。
能在改变时触发更新的状态被认为是响应式的。在 Vue 中,响应式状态被保存在组件中。
小结
- 使用 data 组件选项来声明响应式状态,该选项应该是一个返回对象的函数
- 使用双花括号”状态值“渲染文本(双大括号写法又名:mustache语法)
- 双花括号中的内容并不只限于标识符或路径——我们可以使用任何有效的 JavaScript 表达式
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| <script> export default { data() { return { name:"Zhangsan", gender:"male" } } } </script>
<template> // 渲染name属性 <h1>{{ name }}</h1> <h1>{{ gender }}</h1> <h1>{{ this.gender.split('') }}</h1> </template>
|

Attribute 绑定
在 Vue 中,mustache 语法 (即双大括号) 只能用于文本插值。为了给 attribute 绑定一个动态值,需要使用 v-bind 指令:
1
| <div v-bind:id="dynamicId"></div>
|
示例代码
要求: 把一个动态的 class
绑定添加到这个 <h1>
上,并使用 titleClass
的数据属性作为它的值。如果绑定正确,文字将会变为红色
1 2 3
| <div v-bind:id="dynamicId"></div> # 简写 <div :id="dynamicId"></div>
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| <script> export default { data() { return { titleClass: 'title' } } } </script>
<template> <h1>Make me red</h1> </template>
<style> .title { color: red; } </style>
|
这个一开始没理解
1 2
| # 这样写没有效果,看了参考答案明白了 <h1 :id="titleClass">Make me red</h1>
|
要延伸一下,JS可以通过 id
,class
,name
等找到页面的元素,示例只是以id
为例,所以有个title
的样式,就明白v:bind
绑定了
1
| <h1 :class="titleClass">Make me red</h1>
|

再验证下,绑定id
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| <script> export default { data() { return { titleClass: 'title', today:'mondy' } } } </script>
<template> <h1 :class="titleClass">Make me red</h1> <h1 :id="today">Make me green</h1> </template>
<style> .title { color: red; } #mondy { color: green; } </style>
|

小结:
- 使用 v-bind:id=”dynamicId” 绑定元素,可以给属性一个动态值
- v-bind:id=”dynamicId” 可以简写为 :id=”dynamicId”
事件监听
可以使用 v-on 指令监听 DOM 事件
1
| <button v-on:click="increment">{{ count }}</button>
|
简写
1
| <button @click="increment">{{ count }}</button>
|
实现一个点击自增的按钮效果
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| <script> export default { data() { return { count: 0 } }, methods: { increment() { this.count++ }, incremetMore() { this.count += 2 } } } </script>
<template> <button @click="incremetMore">Count is: {{ count }}</button> </template>
|

小结:
- 使用 v-on:click=”方法名” 监听点击事件
- v-on:click=”方法名”可以简写为 @click=”方法名”
- methods里定义方法列表
表单绑定
可以同时使用 v-bind 和 v-on 来在表单的输入元素上创建双向绑定
1
| <input :value="text" @input="onInput">
|
1 2 3 4 5 6 7
| methods: { onInput(e) { this.text = e.target.value } }
|
为了简化双向绑定,Vue 提供了一个 v-model 指令,它实际上是上述操作的语法糖:
示例代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| <script> export default { data() { return { text: '' } }, methods: { onInput(e) { this.text = e.target.value } } } </script>
<template> // 双向绑定: input通过:value绑定(bind)了状态值里的text,input事件触发methods里的onInput方法 <input :value="text" @input="onInput" placeholder="Type here"> <p>{{ text }}</p> </template>
|
使用v-model
进行简写
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| <script> export default { data() { return { text: '' } } } </script>
<template> // 双向绑定: input通过:value绑定(bind)了状态值里的text,input事件触发methods里的onInput方法 <input v-model="text" placeholder="Type here"> <p>{{ text }}</p> </template>
|

小结:
- 使用 v-model=”状态值”,可以实现双向绑定,支持文本输入框,多选框、单选框、下拉框 – 开发时更关注状态的变化,建立绑定很多时候是必要的苦力活
条件渲染
可以使用 v-if
指令来有条件地渲染元素
1
| <h1 v-if="awesome">Vue is awesome!</h1>
|
1 2
| <h1 v-if="awesome">Vue is awesome!</h1> <h1 v-else>Oh no 😢</h1>
|
这个没啥好说的,很自然的逻辑,过一下用例即可
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| <script> export default { data() { return { awesome: true } }, methods: { toggle() { } } } </script>
<template> <button @click="toggle">Toggle</button> <h1>Vue is awesome!</h1> <h1>Oh no 😢</h1> </template>
|
示例程序同时展示了两个 <h1>
标签,并且按钮不执行任何操作。尝试给它们添加 v-if
和 v-else
指令,并实现 toggle()
方法,让我们可以使用按钮在它们之间切换。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| <script> export default { data() { return { awesome: true } }, methods: { toggle() { this.awesome = !this.awesome } } } </script>
<template> <button @click="toggle">Toggle</button> <h1 v-if="awesome">Vue is awesome!</h1> <h1 v-else>Oh no 😢</h1> </template>
|
小结:
- 可以使用
v-if="状态值"
,v-else
实现根据状态值来执行不同的操作
参考
- Vue互动教程