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 $router和$route的区别详解
Dec 02 Vue.js
vue基于Echarts的拖拽数据可视化功能实现
Dec 04 Vue.js
VUE中鼠标滚轮使div左右滚动的方法详解
Dec 14 Vue.js
Vue实现省市区三级联动
Dec 27 Vue.js
vue 页面跳转的实现方式
Jan 12 Vue.js
vue如何使用rem适配
Feb 06 Vue.js
vue项目两种方式实现竖向表格的思路分析
Apr 28 Vue.js
如何使用vue3打造一个物料库
May 08 Vue.js
解决Vue+SpringBoot+Shiro跨域问题
Jun 09 Vue.js
Vue组件更新数据v-model不生效的解决
Apr 02 Vue.js
vue3语法糖内的defineProps及defineEmits
Apr 14 Vue.js
VUE解决跨域问题Access to XMLHttpRequest at
May 06 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
构建简单的Webmail系统
2006/10/09 PHP
php下连接mssql2005的代码
2011/01/17 PHP
PHP数据库操作之基于Mysqli的数据库操作类库
2014/04/19 PHP
php读取txt文件并将数据插入到数据库
2016/02/23 PHP
php日期操作技巧小结
2016/06/25 PHP
小议Function.apply()之二------利用Apply的参数数组化来提高 JavaScript程序性能
2006/11/30 Javascript
js的闭包的一个示例说明
2008/11/18 Javascript
Document 对象的常用方法
2009/07/31 Javascript
JavaScript学习点滴 call、apply的区别
2010/10/22 Javascript
Javascript 页面模板化很多人没有使用过的方法
2012/06/05 Javascript
javascript实现div的拖动并调整大小类似qq空间个性编辑模块
2012/12/12 Javascript
JQueryEasyUI datagrid框架的进阶使用
2013/04/08 Javascript
js控制分页打印、打印分页示例
2014/02/08 Javascript
js判断浏览器类型为ie6时不执行
2014/06/15 Javascript
浅析jQuery Mobile的初始化事件
2015/12/03 Javascript
微信小程序 倒计时组件实现代码
2016/10/24 Javascript
深入理解jQuery.data() 的实现方式
2016/11/30 Javascript
Javascript中字符串replace方法的第二个参数探究
2016/12/05 Javascript
浅谈Vue的基本应用
2016/12/27 Javascript
JS实现仿百度文库评分功能
2017/01/12 Javascript
详细分析JS函数去抖和节流
2017/12/05 Javascript
jQuery开发仿QQ版音乐播放器
2020/07/10 jQuery
vue内置组件keep-alive事件动态缓存实例
2020/10/30 Javascript
python 判断是否为正小数和正整数的实例
2017/07/23 Python
简单了解python 邮件模块的使用方法
2019/07/24 Python
python 实现手机自动拨打电话的方法(通话压力测试)
2019/08/08 Python
增大python字体的方法步骤
2020/07/05 Python
Django Admin后台模型列表页面如何添加自定义操作按钮
2020/11/11 Python
2014年圣诞节倒计时网页的制作过程
2014/12/05 HTML / CSS
LivingSocial英国:英国本地优惠
2019/02/22 全球购物
自我鉴定书面格式
2014/01/13 职场文书
消防安全汇报材料
2014/02/08 职场文书
医院护士见习期自我鉴定
2014/04/10 职场文书
结对共建协议书
2014/08/20 职场文书
Nginx解决前端访问资源跨域问题的方法详解
2021/03/31 Servers
SpringCloud之@FeignClient()注解的使用方式
2021/09/25 Java/Android