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 相关文章推荐
jquery ajax 同步异步的执行 return值不能取得的解决方案
Jan 08 Javascript
Js 冒泡事件阻止实现代码
Jan 27 Javascript
jquery 循环显示div的示例代码
Oct 18 Javascript
调用innerHTML之后onclick失效问题的解决方法
Jan 28 Javascript
基于socket.io和node.js搭建即时通信系统
Jul 30 Javascript
JavaScript function函数种类详解
Feb 22 Javascript
jQuery判断浏览器并动态调整select宽度的方法
Mar 02 Javascript
BootStrap扔进Django里的方法详解
May 13 Javascript
原生JS和jQuery操作DOM对比总结
Jan 19 Javascript
npm 语义版本控制详解
Sep 10 Javascript
原生JavaScript创建不可变对象的方法简单示例
May 07 Javascript
让JavaScript代码更加精简的方法技巧
Jun 01 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+Ajax实现唯一校验实现代码[简单应用]
2011/11/29 PHP
php中将字符串转为HTML的实体引用的一个类
2013/02/03 PHP
php实现的zip文件内容比较类
2014/09/24 PHP
php截取视频指定帧为图片
2016/05/16 PHP
PHP session会话操作技巧小结
2016/09/27 PHP
特殊字符、常规符号及其代码对照表
2006/06/26 Javascript
小议Javascript中的this指针
2010/03/18 Javascript
js中对象的声明方式以及数组的一些用法示例
2013/12/11 Javascript
js实现网页倒计时、网站已运行时间功能的代码3例
2014/04/14 Javascript
js下将阿拉伯数字每三位一逗号分隔(如:15000000转化为15,000,000)
2014/06/02 Javascript
JS仿Windows开机启动Loading进度条的方法
2015/02/26 Javascript
Javascript实现商品秒杀倒计时(时间与服务器时间同步)
2015/09/16 Javascript
Clipboard.js 无需Flash的JavaScript复制粘贴库
2015/10/02 Javascript
jQuery实现仿新浪微博浮动的消息提示框(可智能定位)
2015/10/10 Javascript
js监听input输入框值的实时变化实例
2017/01/26 Javascript
jQuery实现鼠标经过显示动画边框特效
2017/03/24 jQuery
JS实现统计字符串中字符出现个数及最大个数功能示例
2018/06/04 Javascript
JavaScript实现封闭区域布尔运算的示例代码
2018/06/25 Javascript
js canvas实现二维码和图片合成的海报
2020/11/19 Javascript
jqGrid表格底部汇总、合计行footerrow处理
2019/08/21 Javascript
React Native中ScrollView组件轮播图与ListView渲染列表组件用法实例分析
2020/01/06 Javascript
python编写简单爬虫资料汇总
2016/03/22 Python
Python字符串拼接、截取及替换方法总结分析
2016/04/13 Python
Python通过Django实现用户注册和邮箱验证功能代码
2017/12/11 Python
python+matplotlib实现礼盒柱状图实例代码
2018/01/16 Python
Python3实现配置文件差异对比脚本
2019/11/18 Python
基于Python实现扑克牌面试题
2019/12/11 Python
Python3标准库glob文件名模式匹配的问题
2020/03/13 Python
django修改models重建数据库的操作
2020/03/31 Python
Python实现手势识别
2020/10/21 Python
关于css中margin的值和垂直外边距重叠问题
2020/10/27 HTML / CSS
HTML5播放实现rtmp流直播
2020/06/16 HTML / CSS
Trip.com香港网站:Ctrip携程旗下,全球最大的网上旅游社之一
2016/08/01 全球购物
党校培训思想汇报
2014/01/03 职场文书
成人成长感言如何写?
2019/08/16 职场文书
CSS 实现Chrome标签栏的技巧
2021/08/04 HTML / CSS