当前位置: 首页 > news >正文

inject和provide源码

inject和provide的使用方法,点击链接查看

在初始化时,执行了下面

 callHook(vm, 'beforeCreate');
 initInjections(vm); // resolve injections before data/props
 initState(vm);
 initProvide(vm); // resolve provide after data/props
 callHook(vm, 'created');

1.initInjections 函数

  function initInjections (vm) {
    var result = resolveInject(vm.$options.inject, vm);
    if (result) {
     Object.keys(result).forEach(function (key) {
        {
          defineReactive$$1(vm, key, result[key], function () {警告不允许改});
        }
      });
    }
  }

2.resolveInject函数

function resolveInject (inject, vm) {
  if (inject) {
    var result = Object.create(null);
    var keys = Reflect.ownKeys(inject)
    for (var i = 0; i < keys.length; i++) {
      var key = keys[i];
      if (key === '__ob__') { continue }
      var provideKey = inject[key].from;
      var source = vm;
      while (source) {
        if (source._provided && hasOwn(source._provided, provideKey)) {
          result[key] = source._provided[provideKey];
          break
        }
        source = source.$parent;
      }
      if (!source) {
        if ('default' in inject[key]) {
          var provideDefault = inject[key].default;
          result[key] = typeof provideDefault === 'function'
            ? provideDefault.call(vm)
            : provideDefault;
        } else {
          warn(("Injection \"" + key + "\" not found"), vm);
        }
      }
    }
    return result
  }
}

1.initProvide函数

function initProvide (vm) {
  var provide = vm.$options.provide;
  if (provide) {
    vm._provided = typeof provide === 'function'
      ? provide.call(vm)
      : provide;
  }
}

相关文章:

  • 【SpringBoot项目】SpringBoot+MyBatis+MySQL电脑商城
  • Vue系列(四)之 Vue路由介绍和Node.js的环境搭建
  • http的网站进行访问时候自动跳转至https
  • 【C++】泛型算法(五)泛型算法的使用与设计
  • 使用scss简化媒体查询
  • 国家网络安全宣传周知识竞赛活动小程序界面分享
  • day44 数据库查询命令
  • SpringBoot3基础:最简项目示例
  • linux下文件操作命令
  • 工作比读研简单多了
  • cpolar内网穿透
  • 淘宝分布式文件存储系统( 二 ) -TFS
  • c++模板初阶
  • 行情分析——加密货币市场大盘走势
  • Tomcat多实例+Nginx动静分离、负载均衡
  • GDB 用法之参数输入
  • 全智V5+AXP233电源管理芯片调试
  • 年龄大了转嵌入式有机会吗?
  • canvas-绘图库fabric.js简介
  • 24.Xaml ListView控件-----显示数据
  • 山东省淄博市委原常委宋振波被“双开”
  • 广西人饮旱情仍持续发展,桂西北、桂中风险较高
  • 神舟二十号任务完成最后一次全区合练,发射场做好发射前各项准备
  • 哈萨克斯坦一名副市长遭枪击
  • 大国重器飞天背后,有一位上海航天的“老法师”
  • “棉花糖爸爸”陈生梨:女儿将落户到贵州纳雍