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生命周期的深入理解
Dec 03 Vue.js
vuex Module将 store 分割成模块的操作
Dec 07 Vue.js
vue添加自定义右键菜单的完整实例
Dec 08 Vue.js
全面解析Vue中的$nextTick
Dec 24 Vue.js
Vue使用鼠标在Canvas上绘制矩形
Dec 24 Vue.js
vue.js实现点击图标放大离开时缩小的代码
Jan 27 Vue.js
vue使用节流函数的踩坑实例指南
May 20 Vue.js
vue基于Teleport实现Modal组件
May 31 Vue.js
vue中div禁止点击事件的实现
Apr 02 Vue.js
vue实现省市区联动 element-china-area-data插件
Apr 22 Vue.js
vue postcss-px2rem 自适应布局
May 15 Vue.js
vue3 自定义图片放大器效果的示例代码
Jul 23 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+Mysql+jQuery实现发布微博程序 jQuery篇
2011/10/08 PHP
提示Trying to clone an uncloneable object of class Imagic的解决
2011/10/27 PHP
PHP遍历XML文档所有节点的方法
2015/03/12 PHP
利用PHPStorm如何开发Laravel应用详解
2017/08/30 PHP
javascript showModalDialog模态对话框使用说明
2009/12/31 Javascript
用js实现判断当前网址的来路如果不是指定的来路就跳转到指定页面
2011/05/02 Javascript
js转化毫秒为时间格式代码
2014/04/10 Javascript
js单词形式的运算符
2014/05/06 Javascript
javascript实现checkBox的全选,反选与赋值
2015/03/12 Javascript
javascript白色简洁计算器
2015/05/04 Javascript
jquery插件pagination实现无刷新ajax分页
2015/09/30 Javascript
JS实现简单的tab切换选项卡效果
2016/09/21 Javascript
详解javascript事件绑定使用方法
2016/10/20 Javascript
vue form 表单提交后刷新页面的方法
2018/09/04 Javascript
jQuery扩展方法实现Form表单与Json互相转换的实例代码
2018/09/05 jQuery
express 项目分层实践详解
2018/12/10 Javascript
vue实现PC端录音功能的实例代码
2019/06/05 Javascript
JS中实现浅拷贝和深拷贝的代码详解
2019/06/05 Javascript
[02:36]DOTA2英雄基础教程 帕格纳
2014/01/20 DOTA
Python中删除文件的程序代码
2011/03/13 Python
使用BeautifulSoup爬虫程序获取百度搜索结果的标题和url示例
2014/01/19 Python
详解python中的文件与目录操作
2017/07/11 Python
详解Python中的Numpy、SciPy、MatPlotLib安装与配置
2017/11/17 Python
Python编程给numpy矩阵添加一列方法示例
2017/12/04 Python
Python从单元素字典中获取key和value的实例
2018/12/31 Python
DjangoWeb使用Datatable进行后端分页的实现
2020/05/18 Python
学习python需要有编程基础吗
2020/06/02 Python
解决python运行效率不高的问题
2020/07/20 Python
关于box-sizing的全面理解
2016/07/28 HTML / CSS
详解三种方式实现平滑滚动页面到顶部的功能
2019/04/23 HTML / CSS
明星员工获奖感言
2014/08/14 职场文书
行政经理岗位职责
2015/04/15 职场文书
HTML5来实现本地文件读取和写入的实现方法
2021/05/25 HTML / CSS
vue中 this.$set的使用详解
2021/11/17 Vue.js
解决Vmware虚拟机安装centos8报错“Section %Packages Does Not End With %End. Pane Is Dead”
2022/06/01 Servers
js面向对象编程OOP及函数式编程FP区别
2022/07/07 Javascript