一、初识vue
Vue (读音 /vjuː/,类似于 view) 是一套用于构建用户界面的渐进式框架
第一个vue页面
通过通过上面的 vue 案例,总结 vue 的使用方法如下:
- 创建dom结构,作为vue实例挂载点,vue实例中的所有数据只能在此dom范围内使用
<div id="app"></div>
- 通过 new Vue 创建 vue 实例
- el 属性指定当前 vue 实例的挂载点
- data 中是模型数据,这些数据依赖于当前的vue实例,可以在控制台中访问data数据
- 可以通过插值表达式使用 data 中的数据
vue和原生js对比
案例需求:将文本框输入的内容实时显示到页面上
vue代码
<div id="app">
<input type="text" v-model="message">
<p>{{message}}</p>
</div>
<script src="https://cdn.jsdelivr.net/npm/vue@2.6.10/dist/vue.js"></script>
<script>
var app = new Vue({
el: '#app',
data: {
message: ''
}
});
</script>
原生js代码
<div>
<input type="text">
<p></p>
</div>
<script>
var input = document.querySelector("input");
var p = document.querySelector("p");
input.addEventListener("keyup", () => {
p.innerHTML = input.value;
});
</script>
对比结果
vue 中不用操作 dom 元素,这可以让开发者将经历集中到数据处理及业务逻辑开发中
二、数据绑定
所谓数据绑定,就是将 vue 实例中的 data 属性中的变量显示到挂载点(dom结构)中
内容绑定
将 data 中的数据显示成内容(开始标签与结束标签之间)使用 {{}}
<div id="app">
<p>{{title}}</p>
</div>
上面只能显示纯文本,如果要显示 html 内容,需要使用 v-html 指令
<p v-html="content"></p>
属性绑定
将data中的数据作为某个元素的属性的值,使用 v-bind:属性名称 指令,属性可以是内置,也可以是自定义的
<p v-bind:id="id">{{title}}</p>
v-bind: 可以缩写为 :
<p :id="id">{{title}}</p>
表单控件的值
可以用 v-model 指令在表单 、 及 元素上创建双向数据绑定,它会根据控件类型自动选取正确的方法来更新元素。
表单类型 | 绑定的值 |
---|---|
v-mode:text | 绑定的值是value |
v-mode:textarea | 绑定的值是innerHTML |
v-mode:radio | 绑定的值是value |
v-mode:checkbox/select(单选) | 绑定的值是布尔值 |
v-mode:checkbox/select(多选) | 绑定的值是数组 |
循环遍历
v-for遍历数组
- 作用:根据数组中的元素遍历指定模板内容生成内容
- 语法:
<ul>
<!-- item: 是每一项元素 index: 下标/索引 -->
<li v-for="(item, index) in name">
{{index+1}}.{{item}}
</li>
</ul>
v-for遍历对象
- 作用:根据数组中的元素遍历指定模板内容生成内容
- 语法:
<ul>
<!-- value:属性值 key:属性名 index:下标/索引 -->
<li v-for="(value, key, index) in info">
{{index+1}}.{{value}}
</li>
</ul>
条件渲染
vi-f与v-else-if与v-else
Vue的条件指令可以根据表达式的值在DOM中渲染或销毁元素或组件
<h2 v-if="score>=90">优秀</h2>
<h2 v-else-if="score>=80">良好</h2>
<h2 v-else-if="score>=60">及格</h2>
<h2 v-else>不及格</h2>
v-show
v-show的用法和v-if非常相似,也用于决定一个元素是否渲染
<h2 v-show="isShow">{{message}}</h2>
v-if 和 v-show对比
- v-if 当条件为false时,压根不会有对应的元素在DOM中
- v-show 当条件为false时, 仅仅是将元素的 display 属性设置 none 而已
开发中如何选择呢? - 当需要在显示与隐藏之间切换很频繁时,使用v-show
- 当只有一次切换时,通过使用v-if
样式处理
操作元素的 class 列表和内联样式是数据绑定的一个常见需求。因为它们都是 attribute,所以我们可以用 v-bind 处理它们:只需要通过表达式计算出字符串结果即可
vue操作class
- class 与 v-bind:class 可以共存,但是其实最终操作的都是元素的 class 属性
- v-bind:class 的值可以是字符串、对象或者数组
- 对象语法的含义是:class后面跟的是一个对象
<!-- 用法一:直接通过{}绑定一个类 -->
<h2 :class="{'active': isActive}">Hello World</h2>
<!-- 用法二:也可以通过判断,传入多个值 -->
<h2 :class="{'active': isActive, 'line': isLine}">Hello World</h2>
- 数组语法的含义是:class后面跟的是一个数组
<!-- 1. ['active','news'] 当字符串使用 -->
<h2 class="title" :class="['active','news']">{{message}}</h2>
<!-- [active, new] 当变量使用 -->
<h2 class="title" :class="[active,news]">{{message}}</h2>
<!-- 3. 函数返回值使用 -->
<h2 class="title" :class="getClasses()">{{message}}</h2>
vue操作style
- 对象语法
:style="{color: currentColor, fontSize: fontSize + 'px'}"
- 数组语法
<div v-bind:style="[baseStyles, fontColor]"></div>
//js
baseStyle: {background: 'lime'},
fontSize: {fontSize: '80px'}
事件绑定
- js 中可以通过 addEventListener 的方式为元素注册各种事件类型
- vue 中通过 v-on 指令为元素注册事件监听
<button v-on:click="greet">按钮</button>
<script>
let app = new Vue({
el: '#app',
data: {
},
methods: {
greet: function () {
console.log('初辰')
}
}
})
</script>
计算属性和选择器
计算属性
模板内的表达式非常便利,但是设计它们的初衷是用于简单运算的。在模板中放入太多的逻辑会让模板过重且难以维护
比如我们有firstName和lastName两个变量,我们需要显示完整的名称。但是如果多个地方都需要显示完整的名称,我们就需要写多个{{firstName}} {{lastName}},将上面代码转换成计算属性
/* html */
<h2>{{fullNmae}}</h2>
/* js */
computed: {
fullNmae: function () {
return this.firstNmae + ' ' + this.lastNmae;
}
}
计算属性的缓存
methods和computed区别
- methods不管数据发没发生变化都会调用函数
- computed只有在依赖数据发生变化时才回调函数
侦听器
vue 中的计算属性是不支持异步操作的,只能计算一些同步的值,但是可以使用 vue-async-computed 插件实现这一点
侦听器的应用场景:数据变化时执行异步或开销较大的操作