IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> JavaScript知识库 -> vue顶层组件通过provide + inject + computed + watch 动态传值 -> 正文阅读

[JavaScript知识库]vue顶层组件通过provide + inject + computed + watch 动态传值

如果想从孙子辈组件直接获取到顶层组件的传值,而且是动态刷新的,需要通过provide + inject + computed + watch。

组件是vue开发框架的主角。日常开发过程中,为了利于复用、解耦,提升可读性和可维护性,不知不觉开发了一大堆组件。有时一张页面,其实由许多组件构成,并且这些组件,层层嵌套,层次可能很深。这时问题就来了,假如有一些参数,从顶层组件就开始设置或提供,然后最底层的组件又需要,层层传递,不仅繁琐、容易出错,反而不利于代码的可维护和可读。

有没有一种方法,可以直接由顶层组件传播到最底层呢?或者说,可以让最底层能直接接收到顶层的参数呢?

有的,provide + inject 。顶层组件provide,底层组件inject。但是,这只能保证一次成功,以后参数改变了,底层并不能感知。这时又要加上computed和watch,并且参数是函数类型,各种方法一齐上,才能奏效。

父组件:

export default {
  provide () {
    return {
      alertDt: () => this.dt, // 注意alertDt是一个方法
    }
  },
  data () {
    return {
      dt: new Date()
    }
  },
  methods: {
    toCreate (query) { // 不同情况下,dt被赋上不同的值
      this.dt = query.dt
    },
    showDetail (id) {
      this.dt = new Date()
    }
  }
}

后代组件:

export default {
  inject: ['alertDt'],
  data () {
    return {
      form1: {
        dtRange: this.alertDt()//alertDt是一个方法。。。
      }
    }
  },
  computed: {
    getAlertDt () {
      return this.alertDt()
    }
  },
  watch: {
    getAlertDt: function (val) { // 注意这里不能使用lampda表达式,否则this无效!!!!!!
      this.form1.dtRange = val
    }
  }
}

watch的作用,在这里是用于监视getAlertDt(),也即监视provide里的这个alertDt()。当发觉返回值有变,即做出反应。就这样,当顶层组件,根据不同情况,调用不同的方法,因而导致参数值变化,底层组件就会相应变化。

  JavaScript知识库 最新文章
ES6的相关知识点
react 函数式组件 & react其他一些总结
Vue基础超详细
前端JS也可以连点成线(Vue中运用 AntVG6)
Vue事件处理的基本使用
Vue后台项目的记录 (一)
前后端分离vue跨域,devServer配置proxy代理
TypeScript
初识vuex
vue项目安装包指令收集
上一篇文章      下一篇文章      查看所有文章
加:2021-08-07 21:44:30  更:2021-08-07 21:44:41 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 5:10:21-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码