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使用vant中的checkbox实现全选功能
Nov 17 Vue.js
vue实现下载文件流完整前后端代码
Nov 17 Vue.js
Vue 的 v-model用法实例
Nov 23 Vue.js
解决vue页面刷新,数据丢失的问题
Nov 24 Vue.js
对vue生命周期的深入理解
Dec 03 Vue.js
vue下拉刷新组件的开发及slot的使用详解
Dec 23 Vue.js
解决vue使用vant轮播组件swipe + flex时文字抖动问题
Jan 07 Vue.js
学习 Vue.js 遇到的那些坑
Feb 02 Vue.js
原生JS封装vue Tab切换效果
Apr 28 Vue.js
Vue实现tab导航栏并支持左右滑动功能
Jun 28 Vue.js
前端vue+express实现文件的上传下载示例
Feb 18 Vue.js
vue数据字典取键值项目的字典问题
Apr 12 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
mysql数据库差异比较的PHP代码
2012/02/05 PHP
仿Aspnetpager的一个PHP分页类代码 附源码下载
2012/10/08 PHP
『PHP』PHP截断函数mb_substr()使用介绍
2013/04/22 PHP
使用php将某个目录下面的所有文件罗列出来的方法详解
2013/06/21 PHP
php密码生成类实例
2014/09/24 PHP
关于Laravel参数验证的一些疑与惑
2019/11/19 PHP
Jquery知识点二 jquery下对数组的操作
2011/01/15 Javascript
javascript 使用 NodeList需要注意的问题
2013/03/04 Javascript
一张Web前端的思维导图分享
2015/07/03 Javascript
JS实现图片高亮展示效果实例
2015/11/24 Javascript
jQuery使用$.ajax进行异步刷新的方法(附demo下载)
2015/12/04 Javascript
网页中JS函数自动执行常用三种方法
2016/03/30 Javascript
JS动态插入并立即执行回调函数的方法
2016/04/21 Javascript
移动端利用H5实现压缩图片上传功能
2017/03/29 Javascript
基于bootstrap实现bootstrap中文网巨幕效果
2017/05/02 Javascript
ng-alain的sf如何自定义部件的流程
2020/06/12 Javascript
bootstrap-closable-tab可实现关闭的tab标签页插件
2020/08/09 Javascript
vue.js页面加载执行created,mounted的先后顺序说明
2020/11/07 Javascript
python实现根据图标提取分类应用程序实例
2014/09/28 Python
Python与shell的3种交互方式介绍
2015/04/11 Python
Python利用字典将两个通讯录文本合并为一个文本实例
2018/01/16 Python
Python决策树和随机森林算法实例详解
2018/01/30 Python
python 读取目录下csv文件并绘制曲线v111的方法
2018/07/06 Python
Scrapy+Selenium自动获取cookie爬取网易云音乐个人喜爱歌单
2021/02/01 Python
css3 clip实现圆环进度条的示例代码
2018/02/07 HTML / CSS
canvas版人体时钟的实现示例
2021/01/29 HTML / CSS
墨尔本最受欢迎的复古风格品牌:Princess Highway
2018/12/21 全球购物
英国莱斯特松木橡木家具网上商店:Choice Furniture Superstore
2019/07/05 全球购物
农民工讨薪标语
2014/06/26 职场文书
音乐学专业求职信
2014/07/22 职场文书
三严三实对照检查材料范文
2014/09/23 职场文书
工程质检员岗位职责
2015/04/08 职场文书
《比的意义》教学反思
2016/02/18 职场文书
同学聚会开幕词
2019/04/02 职场文书
python xlwt模块的使用解析
2021/04/13 Python
Python图片验证码降噪和8邻域降噪
2021/08/30 Python