# Vue2.x 的 api
前言
总结一些 vue 中常见的很实用的功能,可以更高效的进行项目开发
# 1.模板打印
Vue.prototype.$log = window.console.log
1
刷新
全屏/自适应
# 2.异常捕获
在 Vue2.x 中用 window.onerror 是捕获不到异常的,异常被框架自身的异常机制捕获了,可以使用errorHandle
来获取
- Vue.config.errorHandler
Vue.config.errorHandler = function (err, vm, info) {
let { message, name, stack } = err
console.error(name, message, stack)
}
1
2
3
4
2
3
4
- 打开控制台,点击内容可以看到捕捉的报错信息
刷新
全屏/自适应
注意
使用 Vue 中的异常捕获机制,我们可以针对捕获到的数据进行分析和上报,为实现前端异常监控奠定基础
- Vue.config.warnHandler 同理
# 3.全局提示
将 ui 组件(如:elementUI)提示组件挂载到 vue 原型上,在组件中可以通过 this 直接调用提示组件
Vue.prototype.$message = message
1
刷新
全屏/自适应
# 4.$nextTick
一般在 vue 项目中异步操作尽量用nextTick
处理,常见的处理场景:等待 DOM 的更新后操作数据
this.$nextTick(() => {
this.$refs.box.getElementsByTagName("li")[0].innerHTML = "覆盖的数据"
})
1
2
3
2
3
nextTick async/await 用法:
刷新
全屏/自适应
# 5.$watch
- 由于是函数式写法,$watch 相比配置的 watch 可以精确控制初始化时间
刷新
全屏/自适应
使用场景
- 1.echarts 图表中需要等数据初始化完成后再监听数据
注意
- 1.watch 非常消耗性能,尽量减少 watch 的使用,能用 computed 代替的用其代替
# 6.extends
- extends 用法和 mixins 很相似,只不过接收的参数是简单的选项对象或构造函数,所以 extends 只能单次扩展一个组件
刷新
全屏/自适应
# 7.$isServer
判断是否是在服务端渲染(SSR)
- 其他方式判断:
try {
document.titls = "test"
} catch (e) {}
// process.env.VUE_ENV 需要在 webpack中进行配置
if (process.env.VUE_ENV === "client") {
document.title = "test"
}
1
2
3
4
5
6
7
2
3
4
5
6
7
- $isServer 判断
if (this.$isServer) {
document.title = "test"
}
1
2
3
2
3
# 8.$mount
手动挂载,可以在一些 js 封装的库中受到挂载 vue 组件
let vm = new Vue({
data: { state: { count: 0 } },
render(h)=>h(com)
});
vm.$mount("#app");
1
2
3
4
5
2
3
4
5
手动插入 dom,可以在一些 js 封装的库中受到挂载 vue 组件
let vm = new Vue({
data: { state: { count: 0 } },
render(h)=>h(com)
});
let dom = vm.$mount().innerHTML; // 生成dom元素
1
2
3
4
5
2
3
4
5
使用场景
- 1.echarts 图表中自定义弹框需要用 vue 来写的部分
# 9.filter
- 使用
// 在双花括号中
{
{
message | capitalize
}
}
// 在 `v-bind` 中
;<div v-bind:id="rawId | formatId"></div>
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
- 注册
// 全局注册
Vue.filter("stampToYYMMDD", (value) => {
// 处理逻辑
})
// 局部注册
filters: {
stampToYYMMDD: (value) => {
// 处理逻辑
}
}
// 多个过滤器全局注册
// /src/common/filters.js
let dateServer = (value) => value.replace(/(\d{4})(\d{2})(\d{2})/g, "$1-$2-$3")
export { dateServer }
// /src/main.js
import * as custom from "./common/filters/custom"
Object.keys(custom).forEach((key) => Vue.filter(key, custom[key]))
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# 10.$delete
# 11.样式写法
- 对象写法
刷新
全屏/自适应
- 数组写法
刷新
全屏/自适应
# 12.mixins
场景:有些组件有些重复的 js 逻辑,如校验手机验证码,解析时间等,mixins 就可以实现这种混入
刷新
全屏/自适应
# 13.$forceUpdate
Vue 内部更新流程:数据变化 --> set 函数 --> 渲染 Watcher --> render --> patch --> 新旧节点对比 --> 插入 dom
- 组件强制更新:
$forceUpdate
触发Watcher
上的update
刷新
全屏/自适应
# 14.Vue.config
Vue.config.performance = true
1
# 15.$set
this.$set(arr, index, item)
1
# 1.4.1 keepAlive
- 路由中
{
path: 'list',
name: 'itemList', // 列表页
component (resolve) {
require(['@/pages/item/list'], resolve)
},
meta: {
keepAlive: true,
title: '列表页'
}
}
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
- 组件中
<template>
<div id="app" class="wrapper">
<keep-alive>
<!-- 需要缓存的视图组件 -->
<router-view v-if="$route.meta.keepAlive"></router-view>
</keep-alive>
<!-- 不需要缓存的视图组件 -->
<router-view v-if="!$route.meta.keepAlive"></router-view>
</div>
</template>
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
- 生命周期
- activated
- deactivated