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 相关文章推荐
Vue3+elementui plus创建项目的方法
Dec 01 Vue.js
vue3自定义dialog、modal组件的方法
Jan 04 Vue.js
vue 实现click同时传入事件对象和自定义参数
Jan 29 Vue.js
Vue详细的入门笔记
May 10 Vue.js
使用这 6个Vue加载动画库来减少我们网站的跳出率
May 18 Vue.js
vue中利用mqtt服务端实现即时通讯的步骤记录
Jul 01 Vue.js
详解Vue router路由
Nov 20 Vue.js
Vue h函数的使用详解
Feb 18 Vue.js
Vue的过滤器你真了解吗
Feb 24 Vue.js
Vue如何清空对象
Mar 03 Vue.js
vue项目proxyTable配置和部署服务器
Apr 14 Vue.js
vue封装数字翻牌器
Apr 20 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中require和require_once的区别说明
2014/02/27 PHP
PHP中array_slice函数用法实例详解
2014/11/25 PHP
PHP实现冒泡排序的简单实例
2016/05/26 PHP
PHP实现批量删除(封装)
2017/04/28 PHP
layui框架实现文件上传及TP3.2.3(thinkPHP)对上传文件进行后台处理操作示例
2018/05/12 PHP
用javascript获取地址栏参数
2006/12/22 Javascript
JavaScript入门教程(12) js对象化编程
2009/01/31 Javascript
JQuery模板插件 jquery.tmpl 动态ajax扩展
2011/11/10 Javascript
jquery方法+js一般方法+js面向对象方法实现拖拽效果
2012/08/30 Javascript
JavaScript遍历table表格中的某行某列并打印其值
2014/07/08 Javascript
Node.js重新刷新session过期时间的方法
2016/02/04 Javascript
用jQuery获取table中行id和td值的实现代码
2016/05/19 Javascript
又一枚精彩的弹幕效果jQuery实现
2016/07/25 Javascript
js阻止移动端页面滚动的两种方法
2017/01/25 Javascript
vue如何集成raphael.js中国地图的方法示例
2017/08/15 Javascript
解决nodejs的npm命令无反应的问题
2018/05/17 NodeJs
详解Nuxt.js部署及踩过的坑
2018/08/07 Javascript
解决Vue axios post请求,后台获取不到数据的问题方法
2018/08/11 Javascript
layer弹出层父子页面事件相互调用方法
2018/08/17 Javascript
vuex实现及简略解析(小结)
2019/03/01 Javascript
vue中实现上传文件给后台实例详解
2019/08/22 Javascript
JS+CSS实现3D切割轮播图
2020/03/21 Javascript
快速了解Vue父子组件传值以及父调子方法、子调父方法
2020/07/15 Javascript
微信小程序换肤功能实现代码(思路详解)
2020/08/25 Javascript
在Vue中使用CSS3实现内容无缝滚动的示例代码
2020/11/27 Vue.js
vue element和nuxt的使用技巧分享
2021/01/14 Vue.js
[00:56]2014DOTA2国际邀请赛 DK、iG 赛前探访
2014/07/10 DOTA
Python与R语言的简要对比
2017/11/14 Python
Python 微信之获取好友昵称并制作wordcloud的实例
2019/02/21 Python
Django数据库迁移常见使用方法
2020/11/12 Python
详解CSS3新增的背景属性
2019/12/25 HTML / CSS
Deichmann英国:德国鞋类零售商
2021/01/30 全球购物
js实现弹框效果
2021/03/24 Javascript
医药代表个人的求职信分享
2013/12/08 职场文书
用Python进行栅格数据的分区统计和批量提取
2021/05/27 Python
使用Ajax实现进度条的绘制
2022/04/07 Javascript