vue之provide和inject

摘要:
divi=“app”>/el-main>el-button@click=“changeName()”>单击<app{font-family;text align;color;margin top;}<子组件导入子组件&lt:divclass=“”>使用提供和注入&lt/grandson><&书信电报;
官方说:

当我们需要从父组件向子组件传递数据时,我们使用 props。想象一下这样的结构:有一些深度嵌套的组件,而深层的子组件只需要父组件的部分内容。在这种情况下,如果仍然将 prop 沿着组件链逐级传递下去

个人理解:

在祖先组件中定义provide(提供)给后代组件的数据或方法,在后代组件中可以通过inject(接受)提供的数据或方法

举个栗子,
想做一个孙子组件刷新爷爷组件的功能

爷爷组件定义provide的data和方法

//祖先组件
<!--
 * @Author: your name
 * @Date: 2021-05-18 09:32:56
 * @LastEditTime: 2021-06-30 11:47:06
 * @LastEditors: Please set LastEditors
 * @Description: In User Settings Edit
 * @FilePath: /vuedemo/src/App.vue
-->
<template>
  <div id="app">
    <el-container>
      <el-header> <nav-new></nav-new></el-header>
      <el-main> <router-view v-if="isRouterAlive"/></el-main>
      <div class="">
        <el-button @click="changeName()">点击</el-button>
      </div>
    </el-container>
  </div>
</template>

<script>
import Vue from "vue";
import NavNew from "./components/Navbar";
export default {
  name: "App",
  provide() {
    return {
      reload: this.reload,
      name: this.name,
    };
  },
  data() {
    return {
      isRouterAlive: true,
      name: "wht",
    };
  },

  methods: {
    //重新加载
    reload() {
      this.isRouterAlive = false;
      this.$nextTick(function() {
        this.isRouterAlive = true;
      });
    },
    changeName() {
      this.name = "瀚海云涛";
      console.log(this.name);
    },
  },
  components: {
    NavNew,
  },
};
</script>

<style>
#app {
  font-family: "Avenir", Helvetica, Arial, sans-serif;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  text-align: center;
  color: #2c3e50;
  margin-top: 60px;
}
</style>

子组件引入孙组件

<!--
 * @Author: your name
 * @Date: 2021-06-30 11:14:07
 * @LastEditTime: 2021-06-30 11:28:17
 * @LastEditors: Please set LastEditors
 * @Description: In User Settings Edit
 * @FilePath: /vuedemo/src/web/proInject.vue
-->
<!--  -->
<template>
  <div class="">
    <p>provide和inject的使用</p>
    <grand-son></grand-son>
  </div>
</template>

<script>
import GrandSon from "@/components/GrandSon.vue";
export default {
  components: {
    GrandSon,
  },
  data() {
    return {};
  },
};
</script>
<style scoped></style>

孙组件用inject接受data和函数

<!--
 * @Author: your name
 * @Date: 2021-06-30 11:07:28
 * @LastEditTime: 2021-06-30 11:36:00
 * @LastEditors: Please set LastEditors
 * @Description: In User Settings Edit
 * @FilePath: /vuedemo/src/components/GrandSon.vue
-->
<!--  -->
<template>
  <div class="">
    孙子组件控制爷爷组件刷新
    <el-button @click="toRefresh">点我</el-button>
    <p>爷爷组件定义的name值:{{ name }}</p>
  </div>
</template>

<script>
export default {
  inject: ["reload", "name"],
  data() {
    return {
      name: this.name,
    };
  },
  methods: {
    toRefresh() {
      this.reload();
    },
  },
};
</script>
<style scoped></style>

免责声明:文章转载自《vue之provide和inject》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇C#里面比较时间大小三种方法业务系统部署。。。下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

C# TCP通信

服务端代码,包含远程客户端类、服务端类、UI。 //远程客户端类class RemoteClient { public TcpClient client{get; private set;} public BinaryReader br{get; private set;} public Binary...

微信小程序 tab切换内容及分页

在实际项目中,经常会遇到点击切换不同内容的情况,尤其是个人中心的订单页,还要同时实现滚动分页效果。 效果如下: <view class="tabNav"> <view wx:for="{{navTab}}" wx:key="index" data-idx="{{index}}" bindtap="currentTab" cla...

微信小程序之base64图片如何预览与一键保存到本地相册?

需求:由于后台服务器各方面的限制,现在服务器返回的图片是base64格式的,小程序端需要支持预览图片和多个图片一键下载功能 一、如何预览base64位图片? WXML页面:item.src的值是base64编码的字符串 <block wx:for="{{imgsLength}}" wx:key="index"> <image...

将本地jar包手动复制到Maven库中,在其它电脑上用Maven打包时出错

版权声明:本文为博主原创文章,未经博主同意不得转载。 https://blog.csdn.net/UP19910522/article/details/31396107 背景交代:在做图片水印时候引入了两个包文件。这两个包是JDK自带的私有包,不能用Maven库里下载,因此笔者手动将rt和jce两个工具jar文件复制到本地的Maven库中。例如...

VMware共享文件夹

如何能将文件在虚拟机和Win7(在这里以Win7为例,WinXP操作一样)下实现互传。方法有很多种。今天,我们就介绍其中一种方法,通过VMware的共享文件夹来实现虚拟机Ubuntu与Win7的文件传输。 第一步:启动Ubuntu 12.04(其他版本的Ubuntu操作差不多)         1. 在VMware虚拟机界面,点VM->Install...

搞懂:MVVM模型以及VUE中的数据绑定数据劫持发布订阅模式

搞懂:MVVM模式和Vue中的MVVM模式 MVVM MVVM : model - view - viewmodel的缩写,说都能直接说出来 model:模型,view:视图,view-Model:视图模型 V:视图,即浏览器最前端渲染的页面 M:模型,数据模型,就是后端页面渲染依赖的数据 VM:稍后再说,因为暂时还不知道怎么工作,什么场景,直接解释有...