vue父组件给子组件的组件传值provide inject的方法


Posted in Javascript onOctober 23, 2019

一般情况下我们父子之间的传值用的是props,这个就不多说了,但是如果想让父给子组件的组件传值怎么办呢,这里我们就可以用到 provide 和 inject(依赖注入)

provide/inject需要一起使用,我们可以从父组件的provide传值,子组件或者孙组件,就可以用inject来接受子组件的provide属性值

具体的可以看官网介绍provide/inject:https://cn.vuejs.org/v2/api/#provide-inject

下面我们可以写个简单的例子来演示一下

父组件parent,我们在里面引入了一个子组件provideChild

<template>
  <div>
    <button @click="add">点击增加</button>
    <provideChild/>
  </div>
</template>
<script>
import provideChild from '@/components/provideChild'
export default {
  components:{provideChild},
  data () {
    return {
      foo:5
    }
  },
  //依赖注入传值
  provide(){
    return{
      newFoo:this.foo
    }
  },
  methods:{
    add(){
      this.foo ++
    },
  }
}
</script>

子组件provideChild,我们同时又在子组件里面引入了一个他的组件

我们可以看到他的打印出注入的newFoo值5

 

<template>
<section>
  <div>我是子组件:{{newFoo}}</div>
  <childChild/>
</section>
</template>
<script>
import childChild from '@/components/childChild'
export default {
  components:{
    childChild
  },
  inject:['newFoo'],
  mounted(){
    console.log(this.newFoo)
  },
  
}
</script>

孙子组件childChild

<template>
  <div>我是子组件的组件:{{newFoo}}</div>
</template>
<script>
export default {
  inject:['newFoo'],
}
</script>

接下来我们可以看一下页面的

vue父组件给子组件的组件传值provide inject的方法

是可以展示的出来的,但是我们点击增加的时候,子组件们都没有响应,如果此时你有好好看文档的话,就应该猜出为什么了

vue父组件给子组件的组件传值provide inject的方法

provide必须是个对象inject的绑定值才可以响应,那么我们可以试一试

//parent父组件的写法
<template>
  <div>
    <button @click="add">点击增加</button>
    <provideChild/>
  </div>
</template>
<script>
import provideChild from '@/components/provideChild'
export default {
  components:{provideChild},
  data () {
    return {
      fooObj:{
        foo:5
      }
    }
  },
  //依赖注入传值
  provide(){
    return{
      newFoo:this.fooObj
    }
  },
  methods:{
    add(){
      this.fooObj.foo ++
    },
  }
}
</script>

//子组件provideChild
<template>
<section>
  <div>我是子组件:{{newFoo.foo}}</div>
  <childChild/>
</section>
</template>
<script>
import childChild from '@/components/childChild'
export default {
  components:{
    childChild
  },
  inject:['newFoo'],
  mounted(){
    console.log(this.newFoo)
  },
  
}
</script>

//孙子组件childChild
<template>
  <div>我是子组件的组件:{{newFoo.foo}}</div>
</template>
<script>
export default {
  inject:['newFoo'],
}
</script>

这样我们就可以操作父组件的添加方法,得到子孙组件的响应

vue父组件给子组件的组件传值provide inject的方法

以上就是本次介绍的全部相关知识点,感谢大家的学习和对三水点靠木的支持。

Javascript 相关文章推荐
Array.slice()与Array.splice()的返回值类型
Oct 09 Javascript
jquery实现html页面 div 假分页有原理有代码
Sep 06 Javascript
JavaScript显示当前文档最后修改日期的方法
Mar 19 Javascript
JS实现横向拉伸动感伸缩菜单效果代码
Sep 04 Javascript
js对象浅拷贝和深拷贝详解
Sep 05 Javascript
jquery UI Datepicker时间控件冲突问题解决
Dec 16 Javascript
javascript设计模式之模块模式学习笔记
Feb 15 Javascript
微信小程序实现点击按钮移动view标签的位置功能示例【附demo源码下载】
Dec 06 Javascript
微信小程序的线程架构【推荐】
May 14 Javascript
JavaScript实现图片伪异步上传过程解析
Apr 10 Javascript
jQuery实现简单全选框
Sep 13 jQuery
vue2实现provide inject传递响应式
May 21 Vue.js
p5.js临摹旋转爱心
Oct 23 #Javascript
JavaScript 作用域scope简单汇总
Oct 23 #Javascript
node.js使用fs读取文件出错的解决方案
Oct 23 #Javascript
jquery 键盘事件 keypress() keydown() keyup()用法总结
Oct 23 #jQuery
JavaScript提升机制Hoisting详解
Oct 23 #Javascript
使用p5.js实现动态GIF图片临摹重现
Oct 23 #Javascript
p5.js临摹动态图形的方法
Oct 23 #Javascript
You might like
thinkphp中U方法按路由规则生成url的方法
2018/03/12 PHP
Javascript !!的作用
2008/12/04 Javascript
Javascript 实现TreeView CheckBox全选效果
2010/01/11 Javascript
Jquery公告滚动+AJAX后台得到数据
2011/04/14 Javascript
输入自动提示搜索提示功能的javascript:sugggestion.js
2013/09/02 Javascript
三种检测iPhone/iPad设备方向的方法
2014/04/23 Javascript
JavaScript日期时间格式化函数分享
2014/05/05 Javascript
js实现简洁的TAB滑动门效果代码
2015/09/06 Javascript
DataTables+BootStrap组合使用Ajax来获取数据并且动态加载dom的方法(排序,过滤,分页等)
2016/11/09 Javascript
JavaScript实现汉字转换为拼音的库文件示例
2016/12/22 Javascript
js常用DOM方法详解
2017/02/04 Javascript
详解vue-router 2.0 常用基础知识点之导航钩子
2017/05/10 Javascript
使用原生js封装的ajax实例(兼容jsonp)
2017/10/12 Javascript
Parcel 打包示例(React HelloWorld)
2018/01/16 Javascript
vue-cli开发时,关于ajax跨域的解决方法(推荐)
2018/02/03 Javascript
jQuery简单判断值是否存在于数组中的方法示例
2018/04/17 jQuery
讲解vue-router之什么是嵌套路由
2018/05/28 Javascript
JavaScript ES6箭头函数使用指南
2018/12/30 Javascript
vue-cli3 配置开发与测试环境详解
2019/05/17 Javascript
JavaScript命名空间模式实例详解
2019/06/20 Javascript
Nodejs 识别图片类型的方法
2019/08/15 NodeJs
layui清空,重置表单数据的实例
2019/09/12 Javascript
JS实现的定时器展示简单秒表、页面弹框及跳转操作完整示例
2020/01/26 Javascript
Vue强制组件重新渲染的方法讨论
2020/02/03 Javascript
JavaScript实现多个物体同时运动
2020/03/12 Javascript
JS严格模式原理与用法实例分析
2020/04/27 Javascript
Python学习笔记_数据排序方法
2014/05/22 Python
Python实现批量下载文件
2015/05/17 Python
scrapy-redis的安装部署步骤讲解
2019/02/27 Python
将python依赖包打包成window下可执行文件bat方式
2019/12/26 Python
浅谈tensorflow中dataset.shuffle和dataset.batch dataset.repeat注意点
2020/06/08 Python
介绍一下JMS编程步骤
2015/09/22 面试题
六十大寿答谢词
2014/01/12 职场文书
社区敬老月活动总结
2015/05/07 职场文书
《家》读后感:万惜拯救,冷暖自知
2019/09/25 职场文书
健身房被搭讪?用python写了个小米计时器助人为乐
2021/06/08 Python