vue2实现provide inject传递响应式


Posted in Vue.js onMay 21, 2021

1. vue2 中的常规写法

// 父级组件提供 'foo'
var Provider = {
data(){
    return {
        foo: 'bar'
    }
}
  provide: {
    fooProvide: this.fooFn // 传递一个引用类型函数过去
  },
 methods:{
     fooFn() {
        return this.foo
      }
 }
}

var Child = {
  inject: ['fooProvide'],
  computed:{
      fooComputed(){
          return this.fooProvide()  // 因为传递过来是个引用类型的函数
      }
  }
  created () {
    console.log(this.fooComputed) 
  }
  // ...
}

2. vue2 中的不太常规写法,但用得舒服.(大概用法还是一样,只是传递的值变成 this--> 整个实例)

// 父级组件提供 'foo'
var Provider = {
data(){
    return {
        foo: 'bar',
        other:'...'
    }
}
  provide: {
    app: this// 传递整个this过去
  },
  mounted(){
      const that = this
      setTimeout(()=>{
          that.foo = '改变值'
      },4000)
  }
}

var Child = {
  inject: ['app'],
  created () {
    console.log(this.app.foo)  // this.app 下面都是响应式的,因为都是同一实例下的引用
  }
  // ...
}

3. vue2 + ts (因为ts之前没用过的话确实不知道怎么用,所以示例一下)

Provide 方式:
 1. @Provide() foo = 'foo'
 2. @Provide('bar') baz = 'bar'

Inject 方式:
 1. @Inject() foo: string
 2. @Inject('bar') bar: string
 3. @Inject(s) baz: string

示例:

// 父级组件提供 'fooProvide'
@Provide('fooProvide') // 随意起名,传递跟接收一样就行.但一般保持跟下面变量一样
fooProvide = this.refreshNumFn // 变量接收一下要传递的值
refreshNumFn() {
  return this.refreshNum
}

// 子组件接收
@Inject('fooProvide') fooProvide: any
get valueA(): any {
    return this.fooProvide()
  }
mounted(){
    console.log(this.valueA) // ...
}

到此这篇关于vue2实现provide inject传递响应式 的文章就介绍到这了,更多相关vue2 provide inject 内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Vue.js 相关文章推荐
在vue中使用inheritAttrs实现组件的扩展性介绍
Dec 07 Vue.js
全面解析Vue中的$nextTick
Dec 24 Vue.js
Vue 数据响应式相关总结
Jan 28 Vue.js
Vue常用API、高级API的相关总结
Feb 02 Vue.js
VUE实现吸底按钮
Mar 04 Vue.js
vue路由实现登录拦截
Mar 24 Vue.js
vue实现滑动解锁功能
Mar 03 Vue.js
Vue.Draggable实现交换位置
Apr 07 Vue.js
vue 实现弹窗关闭后刷新效果
Apr 08 Vue.js
vue项目打包后路由错误的解决方法
Apr 13 Vue.js
vue组件冲突之引用另一个组件出现组件不显示的问题
Apr 13 Vue.js
vue实现在data里引入相对路径
Jun 05 Vue.js
vue使用节流函数的踩坑实例指南
vue实现同时设置多个倒计时
May 20 #Vue.js
Vue和Flask通信的实现
Vue Element UI自定义描述列表组件
使用这 6个Vue加载动画库来减少我们网站的跳出率
一文带你理解vue创建一个后台管理系统流程(Vue+Element)
详解vue中v-for的key唯一性
You might like
php连接数据库代码应用分析
2011/05/29 PHP
php空间不支持socket但支持curl时recaptcha的用法
2011/11/07 PHP
解析php中的escape函数
2013/06/29 PHP
php $_SERVER windows系统与linux系统下的区别说明
2014/02/14 PHP
PHP+Mysql树型结构(无限分类)数据库设计的2种方式实例
2014/07/15 PHP
PDO::beginTransaction讲解
2019/01/27 PHP
windows 2008r2+php5.6.28环境搭建详细过程
2019/06/18 PHP
jQuery 扩展对input的一些操作方法
2009/10/30 Javascript
javascript跨域刷新实现代码
2011/01/01 Javascript
一个页面元素appendchild追加到另一个页面元素的问题
2013/01/27 Javascript
Struts2的s:radio标签使用及用jquery添加change事件
2013/04/08 Javascript
jQuery层级选择器用法分析
2015/02/10 Javascript
JavaScript实现页面5秒后自动跳转的方法
2015/04/16 Javascript
javascript中基本类型和引用类型的区别分析
2015/05/12 Javascript
JS判断页面是否出现滚动条的方法
2015/07/17 Javascript
jQuery+CSS实现一个侧滑导航菜单代码
2016/05/09 Javascript
js基于cookie记录来宾姓名的方法
2016/07/19 Javascript
JS声明式函数与赋值式函数实例分析
2016/12/13 Javascript
ng-options和ng-checked在表单中的高级运用(推荐)
2017/01/21 Javascript
jQuery使用方法
2017/02/04 Javascript
JavaScript 字符串数字左补位,右补位,取固定长度,截位扩展函数代码
2017/03/25 Javascript
angularjs路由传值$routeParams详解
2020/09/05 Javascript
vue2.0路由切换后页面滚动位置不变BUG的解决方法
2018/03/14 Javascript
vue实现提示保存后退出的方法
2018/03/15 Javascript
解决循环中setTimeout执行顺序的问题
2018/06/20 Javascript
使用jQuery给Table动态增加行、清空table的方法
2018/09/05 jQuery
微信小程序 扭蛋抽奖机css3动画实现详解
2019/07/19 Javascript
vue3.0中的双向数据绑定方法及优缺点
2019/08/01 Javascript
Python多线程threading模块用法实例分析
2019/05/22 Python
基于python解线性矩阵方程(numpy中的matrix类)
2019/10/21 Python
Django web自定义通用权限控制实现方法
2020/11/24 Python
财政局党的群众路线教育实践活动整改方案
2014/09/21 职场文书
2014年班组长工作总结
2014/11/20 职场文书
售后前台接待岗位职责
2015/04/03 职场文书
2015年秋季运动会前导词
2015/07/20 职场文书
社区宣传标语口号
2015/12/26 职场文书