Vue是什么?
渐进式JS框架,基于标准的html,css,js构建,并且提供了一套声明式,组件化的编程模型优点:易学易用,性能出色,适用场景丰富
Vue组件的两种风格:
1.选项式API(Vue2):
2.组合式API(Vue3):
Vue项目创建:
1 | npm init vue@latest |
注意: 项目名称不要大写
项目创建完成后 根据提示运行Vue项目
1 |
|
然后就可以访问你的Vue项目了
Vue项目开发环境: vscode + Volar扩展
Vue项目的各个文件夹:
1 | .vscode --- vscode配置文件 |
Vue语法:
Vue使用的一种基于html的模板语法,可以让我们能够声明式的将其组件实例的数据绑定到呈现的dom上,所有的Vue模板都是语法层面合法的html,可以被合法的浏览器和html解析器解析
1.文本插值(最基本的数据绑定)
1 |
|
2.JS语法(JS表达式必须写在return后面才合法):
1 |
|
3.原始HTML:
双大括号会将数据插值为纯文本,而不是HTML,若想插入HTML,需要使用到v-html指令
1 |
|
4.属性(Attribute)绑定:
双大括号不能在HTML attributes中使用 想要响应式的绑定一个attribute 需要使用到v-bind
如:
1 | <template> |
v-bind指令指示元素的id attribute与组件的dynamicId属性保持一致 如果绑定的值是null或者是undefined 那么该attribute将会从渲染的元素上移除
简写:
因为v-bind非常常用,有简写语法:
1 | <div :id="dynamicId" :class= "dynamicClass">Isyang</div> |
布尔型 attribute
依据 true / false 值来决定 attribute 是否应该存在于该元素上。disabled 就是最常见的例子之一。
v-bind 在这种场景下的行为略有不同:
1 | <button :disabled="isButtonDisabled">Button</button> |
当 isButtonDisabled 为真值或一个空字符串时,元素会包含这个 disabled attribute。而当其为其他假值时 attribute 将被忽略。
动态绑定多个值
objectOfAttrs为一个包含多个属性的JS对象,可以通过v-bind来绑定多个属性到当个元素上
1 | <template> |
条件渲染
使用v-if / v-else-if / v-else 指令来控制元素的显示与隐藏
1 | <p v-if="seen">Now you see me</p> |
这里,v-if 指令会基于表达式 seen 的值的真假来移除/插入该p元素另外两个指令也差不多一样 如果seen为true v-else不执行 反之执行。
和v-if一样,v-show也是根据表达式的真假来控制元素的显示与隐藏。不同的是v-show的元素始终会被渲染并保留在DOM中,只是简单地基于CSS的display样式来切换,而v-if在切换的时候条件区块内的监听器和子组件都会被销毁与重建
列表渲染
我们可以使用 v-for 指令基于一个数组来渲染一个列表。v-for 指令的值需要使用 item in items 形式的特殊语法,in可以也用of代替,其中 items 是源数据的数组,而 item 是迭代项的别名:
1 | <template> |
你的数据比较复杂你可以在item后加.去访问指定的值
v-for 也支持使用可选的第二个参数表示当前项的位置索引。
js:
1 | const parentMessage = ref('Parent') |
template
1 | <li v-for="(item, index) in items"> |
效果:
1 | Parent - 0 - Foo |
你也可以使用 v-for 来遍历一个对象的所有属性。遍历的顺序会基于对该对象调用 Object.keys() 的返回值来决定:
1 | const myObject = reactive({ |
效果:
1 | 0. title: How to do lists in Vue |
通过 key 管理状态
Vue 默认按照“就地更新”的策略来更新通过 v-for 渲染的元素列表。当数据项的顺序改变时,Vue 不会随之移动 DOM 元素的顺序,而是就地更新每个元素,确保它们在原本指定的索引位置上渲染。
默认模式是高效的,但只适用于列表渲染输出的结果不依赖子组件状态或者临时 DOM 状态 (例如表单输入值) 的情况。
为了给 Vue 一个提示,以便它可以跟踪每个节点的标识,从而重用和重新排序现有的元素,你需要为每个元素对应的块提供一个唯一的 key attribute
1 | <div v-for="item in items" :key="item.id"> |
事件处理
事件监听
可以使用 v-on 指令 (简写为 @) 来监听 DOM 事件,并在事件触发时执行对应的 JavaScript。用法:v-on:click=”handler” 或 @click=”handler”。
事件处理器 (handler) 的值可以是:
内联事件处理器:事件被触发时执行的内联 JavaScript 语句 (与 onclick 类似)。
方法事件处理器:一个指向组件上定义的方法的属性名或是路径。
内联事件处理器
内联事件处理器通常用于简单场景,例如:1
2
3
4
5
6
7
8
9
10
11
12
13
14<template>
<button v-on:click="count++">addCount</button>
<p>{{count}}</p>
</template>
<script>
export default {
data(){
return {
count:0
}
}
}
</script>方法事件处理器
随着事件处理器的逻辑变得愈发复杂,内联代码方式变得不够灵活。因此 v-on 也可以接受一个方法名或对某个方法的调用。
例如:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23<template>
<button v-on:click="addCount">addCount</button>
<p>{{count}}</p>
</template>
<script>
export default {
// 数据
data(){
return {
count:0
}
},
// 方法
methods:{
addCount(){
// 用this去访问data中定义的数据
this.count++
}
}
}
</script>