• vue 非父子通信 拓展 -- provide inject 跨层级共享数据


    vue 非父子通信 拓展 – provide inject

    provide inject 作用: 跨层级共享数据

    在这里插入图片描述
    在这里插入图片描述

    例子是啥样的?

    在这里插入图片描述

    创建 工程:

    H:\java_work\java_springboot\vue_study
    ctrl按住不放 右键 悬着 powershell

    H:\java_work\java_springboot\js_study\Vue2_3入门到实战-配套资料\01-随堂代码素材\day04\准备代码\08-事件总线-扩展

    vue --version
    vue create provide_inject_demo
    cd provide_inject_demo
    npm run serve
    
    • 1
    • 2
    • 3
    • 4

    代码SonA.vue:

    <template>
      <div class="SonA">我是SonA组件
        <GrandSon></GrandSon>
      </div>
    </template>
    
    <script>
    import GrandSon from '../components/GrandSon.vue'
    export default {
      components:{
        GrandSon
      }
    }
    </script>
    
    <style>
    .SonA {
      border: 3px solid #000;
      border-radius: 6px;
      margin: 10px;
      height: 200px;
      width: 300px;
    }
    </style>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24

    代码SonB.vue:

    <template>
      <div class="SonB">
        我是SonB组件
      </div>
    </template>
    
    <script>
    export default {
    
    }
    </script>
    
    <style>
    .SonB {
      border: 3px solid #000;
      border-radius: 6px;
      margin: 10px;
      height: 200px;
      width: 300px;
    }
    </style>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21

    GrandSon.vue

    <template>
      <div class="grandSon">
        我是GrandSon
        {{ color }} -{{ userInfo.name }} -{{ userInfo.age }}
      </div>
    </template>
    
    <script>
    export default {
      inject: ['color', 'userInfo'],
    }
    </script>
    
    <style>
    .grandSon {
      border: 3px solid #000;
      border-radius: 6px;
      margin: 10px;
      height: 100px;
      width: 200px;
    }
    </style>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22

    App.vue

    <template>
      <div class="app">
        我是APP组件
        <button @click="change">修改数据</button>
        <SonA></SonA>
        <SonB></SonB>
      </div>
    </template>
    
    <script>
    import SonA from './components/SonA.vue'
    import SonB from './components/SonB.vue'
    export default {
      provide() {
        return {
          // 简单类型 是非响应式的
          color: this.color,
          // 复杂类型 是响应式的
          userInfo: this.userInfo,
        }
      },
      data() {
        return {
          color: 'pink',
          userInfo: {
            name: 'zs',
            age: 18,
          },
        }
      },
      methods: {
        change() {
          this.color = 'red'
          this.userInfo.name = 'ls'
        },
      },
      components: {
        SonA,
        SonB,
      },
    }
    </script>
    
    <style>
    .app {
      border: 3px solid #000;
      border-radius: 6px;
      margin: 10px;
    }
    </style>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
  • 相关阅读:
    电影票房排名查询易语言代码
    【开题报告】基于SpringBoot的非文化遗产宣传平台的设计与实现
    怎么把DWG转成DXF格式?这两种方法轻松实现
    Go 语言 new 和 make 关键字的区别
    vscode用密钥文件连接ssh:如果一直要输密码怎么办
    No6-4.从零搭建spring-cloud-alibaba微服务框架,解决微服务间的不鉴权调用等(四,no6-4)
    MapStruct使用方法
    POC模拟攻击利器 —— Nuclei入门(一)
    Linux下 Mysql 互为主从
    基于python深度学习的CNN图像识别鲜花-含数据集+pyqt界面
  • 原文地址:https://blog.csdn.net/wowocpp/article/details/133357337