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 +WebSocket + WaveSurferJS 实现H5聊天对话交互的实例
Nov 18 Vue.js
element-plus一个vue3.xUI框架(element-ui的3.x 版初体验)
Dec 02 Vue.js
对vue生命周期的深入理解
Dec 03 Vue.js
vue 动态生成拓扑图的示例
Jan 03 Vue.js
vue实现可移动的悬浮按钮
Mar 04 Vue.js
详解vue身份认证管理和租户管理
May 25 Vue.js
Vue中foreach数组与js中遍历数组的写法说明
Jun 05 Vue.js
Vue的生命周期一起来看看
Feb 24 Vue.js
vue项目proxyTable配置和部署服务器
Apr 14 Vue.js
vue如何在data中引入图片的正确路径
Jun 05 Vue.js
vue实现input输入模糊查询的三种方式
Aug 14 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简单实现数组分页的方法
2016/04/30 PHP
Laravel框架实现model层的增删改查(CURD)操作示例
2018/05/12 PHP
JavaScript控制Session操作方法
2013/01/17 Javascript
NodeJS的url截取模块url-extract的使用实例
2013/11/18 NodeJs
jQuery的选择器中的通配符使用介绍
2014/03/20 Javascript
Jquery 实现弹出层插件
2015/01/28 Javascript
jQuery插件jFade实现鼠标经过的图片高亮其它变暗
2015/03/14 Javascript
jQuery实现div拖拽效果实例分析
2016/02/20 Javascript
jQuery 中的 DOM 操作
2016/04/26 Javascript
Svg.js实例教程及使用手册详解(一)
2016/05/16 Javascript
Node.js DES加密的简单实现
2016/07/07 Javascript
详解JS中的立即执行函数
2017/02/24 Javascript
Vue中添加过渡效果的方法
2017/03/16 Javascript
layui导航栏实现代码
2017/05/19 Javascript
Javascript中Promise的四种常用方法总结
2017/07/14 Javascript
JS中常用的消息框总结
2018/02/24 Javascript
详解VUE里子组件如何获取父组件动态变化的值
2018/12/26 Javascript
详解Vue.js中引入图片路径的几种方式
2019/06/17 Javascript
基于JS+HTML实现弹窗提示是否确认提交功能
2020/06/17 Javascript
node.js通过url读取文件
2020/10/16 Javascript
玩转python selenium鼠标键盘操作(ActionChains)
2020/04/12 Python
python添加模块搜索路径方法
2017/09/11 Python
django 使用 request 获取浏览器发送的参数示例代码
2018/06/11 Python
Python实现直播推流效果
2019/11/26 Python
jupyternotebook 撤销删除的操作方式
2020/04/17 Python
英国玛莎百货新西兰:Marks & Spencer New Zealand
2019/07/21 全球购物
总裁秘书岗位职责
2013/12/04 职场文书
年会活动策划方案
2014/01/23 职场文书
乡镇党建工作汇报材料
2014/08/14 职场文书
幼儿教师暑期培训方案
2014/08/27 职场文书
教师工作能力自我评价
2015/03/04 职场文书
幼儿园老师工作总结2015
2015/05/22 职场文书
火烧圆明园观后感
2015/06/03 职场文书
HTML速写之Emmet语法规则的实现
2021/04/07 HTML / CSS
图文详解nginx日志切割的实现
2022/01/18 Servers
【海涛DOTA解说】EVE女子战队独家录像加ZSMJ神牛两连发
2022/04/01 DOTA