Vue 选项合并规则

  • dataprovide 等选项使用 mergeDataOrFn
  • 生命周期钩子watch 合并为 数组,使得父子选项中的钩子函数都能够被执行
  • directivesfilterscomponents 等资源选项,父子选项将以原型链的形式被处理,这样才能够在任何地方都是用内置组件、指令等
  • propsmethodsinjectcomputed 等选项,父选项始终可用,但是子选项会覆盖同名的父选项字段
  • 以上没有提到的选项都使用默认 defaultStrat,该选项策略是:只要子选项不是 undefined 就是用子选项,否则使用父选项

附上 mergeDataOrFn 的实现:

export function mergeDataOrFn (
  parentVal: any,
  childVal: any,
  vm?: Component
): ?Function {
  if (!vm) {
    // in a Vue.extend merge, both should be functions
    if (!childVal) {
      return parentVal
    }
    if (!parentVal) {
      return childVal
    }
    // when parentVal & childVal are both present,
    // we need to return a function that returns the
    // merged result of both functions... no need to
    // check if parentVal is a function here because
    // it has to be a function to pass previous merges.
    return function mergedDataFn () {
      return mergeData(
        typeof childVal === 'function' ? childVal.call(this, this) : childVal,
        typeof parentVal === 'function' ? parentVal.call(this, this) : parentVal
      )
    }
  } else {
    return function mergedInstanceDataFn () {
      // instance merge
      const instanceData = typeof childVal === 'function'
        ? childVal.call(vm, vm)
        : childVal
      const defaultData = typeof parentVal === 'function'
        ? parentVal.call(vm, vm)
        : parentVal
      if (instanceData) {
        return mergeData(instanceData, defaultData)
      } else {
        return defaultData
      }
    }
  }
}
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 这篇笔记主要包含 Vue 2 不同于 Vue 1 或者特有的内容,还有我对于 Vue 1.0 印象不深的内容。关于...
    云之外阅读 10,497评论 0 29
  • vue概述 在官方文档中,有一句话对Vue的定位说的很明确:Vue.js 的核心是一个允许采用简洁的模板语法来声明...
    li4065阅读 12,120评论 0 25
  • 一、了解Vue.js 1.1.1 Vue.js是什么? 简单小巧、渐进式、功能强大的技术栈 1.1.2 为什么学习...
    蔡华鹏阅读 8,717评论 0 3
  • 落地生根 《丁乙和他爹》【上】(共上中下) 丁乙其实不姓丁,也不叫丁乙,他爹姓爨,名字叫爨生存...
    冯俊龙阅读 2,642评论 0 4
  • 很多时候在想,痛苦究竟要怎样定义才算。很久没感知过痛苦,最近却愈加深刻,无法纾解。越来越深刻的追忆大学生活,有一段...
    莉莉非利亚阅读 1,310评论 1 0

友情链接更多精彩内容