vue中的inject学习教程


Posted in Javascript onApril 24, 2019

最近看源码有一段对于整合参数的代码,

normalizeProps(child, vm)
 normalizeInject(child, vm)
 normalizeDirectives(child)

想象里边的Inject很少用到,所以查了一下资料,

通常组件传参是有两种情况

  1. 父子组件进行传参,这时候通常利用props
  2. 非父子组件传参,这时候一般利用vuex

会有一种情况隔代组件传参,这时候可以利用props一层一层传递下去,但是代码就比较乱了

所以就有了 provide/inject 进行隔代组件传递

父组件

<template>
  <div class="test">
    <son></son>
  </div>
</template>
<script>
export default {
  name: 'Test',
  provide: {
    name: 'Garrett'
  }
}
</script>

子组件

<template>
  <div>
    {{name}}
  </div>
</template>
 
<script>
export default {
  name: 'Garrettson',
  inject: [name]
}
</script>

对于使用场景,基础组件应该使用props,我个人觉得一般用于比较复杂业务,提供基础数据,比如最近的基金详情页。可以直接在最顶层提供基金的基本信息,然后子组件都可以访问的到,不用每个单独提供detail的props 属性。

PS:vue学习- provide / inject

1、解释

provide / inject这对选项需要一起使用,以允许一个祖先组件向其所有子孙后代注入一个依赖,不论组件层次有多深,并在起上下游关系成立的时间里始终生效。

provide 选项应该是:一个对象或返回一个对象的函数
inject 选项应该是:一个字符串数组,或 一个对象,对象的 key 是本地的绑定名

2、示例

父组件中提供

provide() {
  return {
   map_nodeObj: { map_node: this.obj }
   // 提示:provide 和 inject 绑定并不是可响应的。这是刻意为之的。然而,如果你传入了一个可监听的对象,那么其对象的属性还是可响应的。
  }
 },

子组件中引入

inject: {
  map_nodeObj: {
   default: () => {
    return {map_node: '0'}
   }
  }
 },

使用: this.map_nodeObj.map_node

3、运行顺序

data
provide
created // 在这个阶段$el还未生成,在这先处理privide的逻辑,子孙组件才可以取到inject的值
mounted
...

总结

以上所述是小编给大家介绍的vue中的inject学习教程,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!

Javascript 相关文章推荐
jQuery获取当前对象标签名称的方法
Feb 07 Javascript
document.compatMode的CSS1compat使用介绍
Apr 03 Javascript
javascript简单实现图片预加载
Dec 03 Javascript
深入理解JavaScript系列(38):设计模式之职责链模式详解
Mar 04 Javascript
关于JavaScript的变量的数据类型的判断方法
Aug 14 Javascript
js实现的星星评分功能函数
Dec 09 Javascript
基于原生js淡入淡出函数封装(兼容IE)
Oct 20 Javascript
浅谈jQuery框架Ajax常用选项
Jul 08 jQuery
js的新生代垃圾回收知识点总结
Aug 22 Javascript
uniapp与webview之间的相互传值的实现
Jun 29 Javascript
Javascript call及apply应用场景及实例
Aug 26 Javascript
vue监听浏览器原生返回按钮,进行路由转跳操作
Sep 09 Javascript
浅谈Webpack多页应用HMR卡住问题
Apr 24 #Javascript
微信小程序实现跳转的几种方式总结(推荐)
Apr 24 #Javascript
vue模仿网易云音乐的单页面应用
Apr 24 #Javascript
微信小程序分享功能onShareAppMessage(options)用法分析
Apr 24 #Javascript
详解关于webpack多入口热加载很慢的原因
Apr 24 #Javascript
微信小程序实现的一键连接wifi功能示例
Apr 24 #Javascript
vue router 通过路由来实现切换头部标题功能
Apr 24 #Javascript
You might like
php+mysql实现简单的增删改查功能
2015/07/13 PHP
PHP面向对象程序设计中的self、static、parent关键字用法分析
2019/08/14 PHP
Javascript MD4
2006/12/20 Javascript
ComboBox 和 DateField 在IE下消失的解决方法
2013/08/30 Javascript
Chrome下ifame父窗口调用子窗口的问题示例探讨
2014/03/17 Javascript
jquery实现的判断倒计时是否结束代码
2016/02/05 Javascript
js实现简单的省市县三级联动效果实例
2016/02/18 Javascript
JavaScript数据操作_浅谈原始值和引用值的操作本质
2016/08/23 Javascript
标准的js无缝滚动效果
2016/08/30 Javascript
AngularJS双向绑定和依赖反转实例详解
2017/04/15 Javascript
node文件批量重命名的方法示例
2017/10/23 Javascript
vue中vee validate表单校验的几种基本使用
2018/06/25 Javascript
Vue列表渲染的示例代码
2018/11/01 Javascript
vue cli 3.0 搭建项目的图文教程
2019/05/17 Javascript
微信小程序保持session会话的方法
2020/03/20 Javascript
vue-router重写push方法,解决相同路径跳转报错问题
2020/08/07 Javascript
[01:18:21]EG vs TNC Supermajor小组赛B组败者组第一轮 BO3 第一场 6.2
2018/06/03 DOTA
调试Python程序代码的几种方法总结
2015/04/28 Python
python中PIL安装简单教程
2016/04/21 Python
Python程序中的观察者模式结构编写示例
2016/05/27 Python
python中pytest收集用例规则与运行指定用例详解
2019/06/27 Python
python实现车牌识别的示例代码
2019/08/05 Python
Python collections中的双向队列deque简单介绍详解
2019/11/04 Python
Python中如何引入第三方模块
2020/05/27 Python
使用CSS3来制作消息提醒框
2015/07/12 HTML / CSS
魔幻般冒泡背景的CSS3按钮动画
2016/02/27 HTML / CSS
整理HTML5中表单的常用属性及新属性
2016/02/19 HTML / CSS
英国家庭和商业健身器材购物网站:Fitness Options
2018/07/05 全球购物
Jacques Lemans德国:奥地利钟表品牌
2019/12/26 全球购物
医学院毕业生自荐信
2013/11/08 职场文书
2014年大学生党课心得体会范文
2014/03/29 职场文书
个人工作主要事迹
2014/05/08 职场文书
体操比赛口号
2014/06/10 职场文书
考试作弊万能检讨书
2014/10/19 职场文书
仓管员岗位职责范本
2015/04/01 职场文书
联谊活动总结范文
2015/05/09 职场文书