Vue计算属性、监视、生命周期、钩子函数
计算属性
将属性计算的过程封装到一个函数中,使用计算属性是会自动调用函数,函数的返回值就是计算属性的值
优点:
- 可维护性高
- 计算属性比直接用调用函数来使用性能要高(有缓存)
- 只有相关的属性发生了变化才会重新计算
基本使用
1 | var vm = new Vue({ |
计算属性是基于它们的依赖项进行缓存的
如果页面中需要使用多次计算属性的值,只会计算一次,计算属性只有在它的相关依赖发生改变时才会重新求值。
计算属性不能与data中的属性同名,因为无论是data中的属性还是计算属性,最终都是挂载到vm上的
完整形式
1 | // 上面的计算属性只设置了getter而没有setter,所以在赋值时会报错 |
watch监视数据的变化
vue实例中提供了一个watch属性,用于监听vue实例中的属性的变化。
watch对应了一个对象,键是观察的属性,值是对应的回调函数。
基本使用
- 基本使用
1 | // watch对象: 用于监视数据的变化 |
- 表单校验效果
1 | watch: { |
监视对象
监视对象的时候,需要加上
deep: true为了发现对象内部值的变化,可以在选项参数中指定
deep: true
- 如果是一个对象,无法监听到对象内部值的变化
1 | <script> |
- 对象需要加上deep(数组不需要),同时会多消耗一些性能,参考 https://cn.vuejs.org/v2/api/#vm-watch
1 | watch: { |
- immediate 属性,页面刚加载就执行一次
1 | watch: { |
生命周期与钩子函数
生命周期介绍
- vue生命周期钩子函数
- 简单说:一个实例从开始到最后消亡所经历的各种状态,就是一个实例的生命周期
实例生命周期函数的定义:从组件被创建,到组件挂载到页面上运行,再到页面关闭组件被卸载,这三个阶段总是伴随着组件各种各样的事件,那么这些事件,统称为组件的生命周期函数
- 生命周期的钩子函数:框架提供的函数,能够让开发人员的代码,参与到组件的生命周期中。也就是说,通过钩子函数,就可以控制组件的行为
- 注意:vue在执行过程中会自动调用生命周期钩子函数,我们只需要提供这些钩子函数即可
- 注意:钩子函数的名称都是固定的
1 | 1. vue的初始化阶段 |
钩子函数 - beforeCreate()
- 说明:在实例初始化之后,数据观测 (data observer) 和 event/watcher 事件配置之前被调用
- 注意:此时,无法获取 data中的数据、methods中的方法
钩子函数 - created()
- 注意:这是一个常用的生命周期,可以调用methods中的方法、改变data中的数据
- vue实例生命周期 参考1
- vue实例生命周期 参考2
- 使用场景:发送请求获取数据
钩子函数 - beforeMounted()
- 说明:在挂载开始之前被调用
钩子函数 - mounted()
- 说明:此时,vue实例已经挂载到页面中,可以获取到el中的DOM元素,进行DOM操作
钩子函数 - beforeUpdated()
- 说明:数据更新时调用,发生在虚拟 DOM 重新渲染和打补丁之前。你可以在这个钩子中进一步地更改状态,这不会触发附加的重渲染过程。
钩子函数 - updated()
- 说明:组件 DOM 已经更新,所以你现在可以执行依赖于 DOM 的操作。
钩子函数 - beforeDestroy()
- 说明:实例销毁之前调用。在这一步,实例仍然完全可用。
- 使用场景:实例销毁之前,执行清理任务,比如:清除定时器等
钩子函数 - destroyed()
- 说明:Vue 实例销毁后调用。调用后,Vue 实例指示的所有东西都会解绑定,所有的事件监听器会被移除,所有的子实例也会被销毁。
过滤器
过滤器可以将处理字符串的过程封装,以便将来复用。多用于处理时间戳(moment插件)。
1. 定义过滤器
1 | Vue.filter(过滤器的名字, function(value) { |
2. 使用过滤器
1 | {{ msg | 过滤器名字 }} |
3. 过滤器可以被传参
1 | // 使用 |
4. 全局过滤器和局部过滤器
- 全局过滤器:在全局中使用
Vue.filter(...) - 局部过滤器:在创造实例中使用 (和data,methods等相同)
1
2
3
4
5filters: {
filter1(value) {
return ...
}
}