Vue官方文档梳理之全局配置


Posted in Javascript onNovember 22, 2017

本文主要介绍了Vue官方文档梳理之全局配置,分享给大家,也给自己留个笔记。具体如下:

optionMergeStrategies

用于自定义选项的合并策略,Vue已经预定义了一些自己配置项的合并策略,如下图所示。

Vue官方文档梳理之全局配置

比如props、methods、computed就是同一个策略:子配置项会覆盖父级配置项。源码如下:

var strats = config.optionMergeStrategies;
strats.props =
strats.methods =
strats.computed = function (parentVal, childVal) {
 if (!childVal) { return Object.create(parentVal || null) }
 if (!parentVal) { return childVal }
 var ret = Object.create(null);
 extend(ret, parentVal);
 extend(ret, childVal);
 return ret
};

什么时候才会用到这些配置的合并规则呢?查阅源码,发现只要调用mergeOptions时,就会用到上面的策略。总结下来有以下几种场景:

  1. 使用了 Vue.mixin 或 mixins 配置项
  2. 使用了 Vue.extend 或 extends 配置项或Vue.component(背后实际上是调用了Vue.extend)
  3. new Vue() 或 new Vue.extend()

单独使用一个时,也会触发合并规则,但是只会有child包含配置项,所以不需要合并。只有当多个一起使用时,比如 Vue.compeont 和 extends 、mixins 配置项一起使用,这个时候就parent和child都会有相同的配置项,这时候也才有所谓的合并,举个完整的例子来说明上述的场景。

Vue.config.optionMergeStrategies['customOption'] = function (toVal, fromVal) {
  console.log(toVal, fromVal)
  if (!toVal) return fromVal
  if (!fromVal) return toVal
  // toVal 和 fromVal 同时存在,表明此时parent和child都包含配置型
  return toVal + '&' + fromVal
}

Vue.extend({
  customOption: 'Vue.extend'
})

Vue.component('custom', {
  customOption: 'Vue.component'
})

var vm = new Vue({
  customOption: 'newVue',
  extends: {
    customOption: 'extends'
  },
  mixins: [{
    customOption: 'mixins'
  }]
})

console.log(vm.$options.customOption)

控制台打印如下:

Vue官方文档梳理之全局配置

按顺序解释如下:

  1. undefined "Vue.extend"合并 Vue.options 和 extendOptions
  2. undefined "Vue.component"合并 Vue.options 和 extendOptions
  3. undefined "extends"extends配置项合并先于mixins,此时合并的是 Vue.options 和extends配置,因此toVal是undefined
  4. extends mixins完成了extends合并,接着就是mixins,此时 Vue.options 上已经包含了extends的配置项,因此 toVal 是extends,fromVal就是mixins。最终合并后的值:extends&mixins
  5. extends&mixins newVue完成了extends和mixins后,最终合并vm.constructor和实例的options
  6. extends&mixins&newVue最终合并后的 customOption 的选项值

devtools

离线下载chrome 扩展地址(不需要梯子):https://www.crx4chrome.com/crx/11903/

把下载的文件拖到扩展程序页面即可完成安装。

Vue官方文档梳理之全局配置

errorHandler

Vue 涉及到执行用户配置的地方都放在 try catch 中,因此即使你 throw 抛出错误,整个实例也不会挂。

Vue.config.errorHandler = function (err, vm, info) {
  console.log(arguments)
}
new Vue({
  created: function () {
    throw "error msg"
  }
})
// ["error msg", Vue$3, "created hook"]

ignoredElements

首先要理解忽略的到底是什么?是元素本身还是包括元素里的内容(就像v-pre一样),首先要知道这个配置的背景,官网举了Web Components APIs(以下简称WCA)的例子,WCA和Vue.component一样,也可以自定义元素,不过这个目前还是个草案。那么对于Vue来讲,元素就可以分为:HTML原生元素,Vue自定义元素,WCA自定义元素。那么对于一个元素,Vue的判断顺序:原生 > Vue自定义 > ignoredElements > 无法识别,对于无法识别的Vue会假定你可能把Vue自己定义元素拼错了,因此会发出Unknown custom element的警告。另外:

  1. Vue定义和HTML标签同名的元素是无效的,比如定义Vue.compoent('header',{})
  2. ignoredElements包含Vue定义的元素是无效的
  3. WCA自定义元素可以被构建虚拟dom

Vue官方文档梳理之全局配置

performance(2.2.0+)

只能在开发版上使用。caniuse上查询 performance 可知主流浏览器都已经支持,这个可以用于分析Vue组件在不同阶段中花费的时间,进而知道哪里可以优化。查看源码,发现在以下阶段加上了performance.measure。

  1. performance.measure((组件名+ " render"), startTag, endTag);
  2. performance.measure((组件名+ " patch"), startTag, endTag);
  3. performance.measure((组件名 + " init"), startTag, endTag);
  4. performance.measure(((组件名 + " compile"), 'compile', 'compile end');

比如在谷歌浏览器中查看自定义组件Vue.component('my-component')的各个阶段花费的时间:

Vue官方文档梳理之全局配置

在 IE11 中查看

Vue官方文档梳理之全局配置

productionTip(2.2.0+)

对于开发版本,会默认向控制台打印:

Vue官方文档梳理之全局配置

设置为false就不再显示。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
javascript权威指南 学习笔记之javascript数据类型
Sep 24 Javascript
纯JS实现旋转图片3D展示效果
Apr 12 Javascript
在Python中使用glob模块查找文件路径的方法
Jun 17 Javascript
JavaScript基本的输出和嵌入式写法教程
Oct 20 Javascript
Bootstrap按钮下拉菜单组件详解
May 10 Javascript
jQuery Mobile中的button按钮组件基础使用教程
May 23 Javascript
JavaScript定义及输出螺旋矩阵的方法详解
Dec 01 Javascript
vue-cli系列之vue-cli-service整体架构浅析
Jan 14 Javascript
C#程序员入门学习微信小程序的笔记
Mar 05 Javascript
layui button 按钮弹出提示窗口,确定才进行的方法
Sep 06 Javascript
vue项目打包后提交到git上为什么没有dist这个文件的解决方法
Sep 16 Javascript
vue制作toast组件npm包示例代码
Oct 29 Javascript
vue.js开发实现全局调用的MessageBox组件实例代码
Nov 22 #Javascript
vue在使用ECharts时的异步更新和数据加载详解
Nov 22 #Javascript
echarts学习笔记之箱线图的分析与绘制详解
Nov 22 #Javascript
解析Vue2 dist 目录下各个文件的区别
Nov 22 #Javascript
浅谈Vuex@2.3.0 中的 state 支持函数申明
Nov 22 #Javascript
echarts学习笔记之图表自适应问题详解
Nov 22 #Javascript
arcgis for js栅格图层叠加(Raster Layer)问题
Nov 22 #Javascript
You might like
PHP 5.3 下载时 VC9、VC6、Thread Safe、Non Thread Safe的区别分析
2011/03/28 PHP
PHP常用处理静态操作类
2015/04/03 PHP
php实现的RSS生成类实例
2015/04/23 PHP
PHP计算数组中值的和与乘积的方法(array_sum与array_product函数)
2016/04/01 PHP
php排序算法实例分析
2016/10/17 PHP
Yii 2.0中场景的使用教程
2017/06/02 PHP
JavaScript 操作键盘的Enter事件(键盘任何事件),兼容多浏览器
2010/10/11 Javascript
奉献给JavaScript初学者的编写开发的七个细节
2011/01/11 Javascript
JQuery中对服务器控件 DropdownList, RadioButtonList, CheckboxList的操作总结
2011/06/28 Javascript
利用javascript的面向对象的特性实现限制试用期
2011/08/04 Javascript
幻灯片带网页设计中的20个奇妙应用示例小结
2012/05/27 Javascript
jQuery查询数据返回object和字符串影响原因是什么
2013/08/09 Javascript
jquery统计复选框选中示例
2013/11/05 Javascript
table对象中的insertRow与deleteRow使用示例
2014/01/26 Javascript
javascript:void(0)的问题使用探讨
2014/04/10 Javascript
基于Bootstrap的Metronic框架实现条码和二维码的生成及打印处理操作
2016/08/29 Javascript
几种tab切换详解
2017/02/03 Javascript
详解使用vue实现tab 切换操作
2017/07/03 Javascript
jQuery实现适用于移动端的跑马灯抽奖特效示例
2019/01/18 jQuery
Angular8路由守卫原理和使用方法
2019/08/29 Javascript
Vue路由切换页面不更新问题解决方案
2020/07/10 Javascript
Javascript类型判断相关例题及解析
2020/08/26 Javascript
在vscode 中设置 vue模板内容的方法
2020/09/02 Javascript
js实现电灯开关效果
2021/01/19 Javascript
Python中使用MELIAE分析程序内存占用实例
2015/02/18 Python
使用Python从零开始撸一个区块链
2018/03/14 Python
使用Pyhton集合set()实现成果查漏的例子
2019/11/24 Python
如何提高JDBC的性能
2013/04/30 面试题
高级技校毕业生自荐信
2013/11/18 职场文书
会计电算化专业个人的自我评价
2013/11/24 职场文书
思想汇报格式
2014/01/05 职场文书
年度献血先进个人事迹材料
2014/02/14 职场文书
奥巴马开学演讲稿
2014/05/15 职场文书
小学生2015教师节演讲稿
2015/03/19 职场文书
结婚十年感言
2015/07/31 职场文书
基于Android10渲染Surface的创建过程
2022/08/14 Java/Android