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中使用mockjs代码实例
Nov 25 Vue.js
vue组件中节流函数的失效的原因和解决方法
Dec 02 Vue.js
vue3使用vue-count-to组件的实现
Dec 25 Vue.js
vue3.0自定义指令(drectives)知识点总结
Dec 27 Vue.js
SpringBoot+Vue 前后端合并部署的配置方法
Dec 30 Vue.js
详解Vue2的diff算法
Jan 06 Vue.js
Vue实现圆环进度条的示例
Feb 06 Vue.js
WebStorm无法正确识别Vue3组合式API的解决方案
Feb 18 Vue.js
idea编译器vue缩进报错问题场景分析
Jul 04 Vue.js
Vue全局事件总线你了解吗
Feb 24 Vue.js
vue elementUI表格控制对应列
Apr 13 Vue.js
vue如何清除浏览器历史栈
May 25 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 文件上传全攻略
2010/04/28 PHP
php比较两个字符串长度的方法
2015/07/13 PHP
php实现的数字验证码及数字运算验证码
2015/07/30 PHP
PHP文件类型检查及fileinfo模块安装使用详解
2019/05/09 PHP
laravel 执行迁移回滚示例
2019/10/23 PHP
把html页面的部分内容保存成新的html文件的jquery代码
2009/11/12 Javascript
利用js获取服务器时间的两个简单方法
2010/01/08 Javascript
jQuery的控件及事件(输入控件及回车事件)使用示例
2013/07/25 Javascript
JS+DIV实现鼠标划过切换层效果的实例代码
2013/11/26 Javascript
jquery实现二级导航下拉菜单效果
2015/12/18 Javascript
实现easyui的datagrid导出为excel的示例代码
2016/11/10 Javascript
CSS3结合jQuery实现动画效果及回调函数的实例
2017/12/27 jQuery
Node+OCR实现图像文字识别功能
2018/11/26 Javascript
详解基于vue-cli3快速发布一个fullpage组件
2019/03/08 Javascript
深入探索VueJS Scoped CSS 实现原理
2019/09/23 Javascript
使用vue构建多页面应用的示例
2020/10/22 Javascript
Python open()文件处理使用介绍
2014/11/30 Python
Python中的异常处理简明介绍
2015/04/13 Python
Django REST为文件属性输出完整URL的方法
2017/12/18 Python
python @property的用法及含义全面解析
2018/02/01 Python
pytorch 把MNIST数据集转换成图片和txt的方法
2018/05/20 Python
Python爬虫图片懒加载技术 selenium和PhantomJS解析
2019/09/18 Python
Django1.11自带分页器paginator的使用方法
2019/10/31 Python
基于python操作ES实例详解
2019/11/16 Python
python读取dicom图像示例(SimpleITK和dicom包实现)
2020/01/16 Python
详解pandas.DataFrame.plot() 画图函数
2020/06/14 Python
使用Python实现微信拍一拍功能的思路代码
2020/07/09 Python
快速解决pymongo操作mongodb的时区问题
2020/12/05 Python
2021年值得向Python开发者推荐的VS Code扩展插件
2021/01/25 Python
详解CSS3的box-shadow属性制作边框阴影效果的方法
2016/05/10 HTML / CSS
个人贷款承诺书
2014/03/28 职场文书
大学生社会实践评语
2014/04/25 职场文书
党员自我评议个人对照检查材料
2014/09/16 职场文书
四风自我剖析材料
2014/09/30 职场文书
小学教师师德师风承诺书
2015/04/28 职场文书
王亚平太空授课观后感
2015/06/12 职场文书