zoukankan      html  css  js  c++  java
  • vue的provide和inject特性

    由来

    组件之间的通信可以通过props和$emit的方式进行通信,但是如果组件之间的关系非常复杂的话,通过以上的方式会很麻烦,并且程序会非常脆弱,没有建中性可言。

    vue2.2.0 中新增provide和inject属性,可以方便的帮助我们进行组件间的传值。

    使用的方式很简单:
    父组件通过provide提供数据,其他组价可以使用inject注入数据。

    注意

    不推荐直接用于应用程序代码中。一般使用的场景是自定义组件库的时候,底层组件之间需要通信的时候使用。

    provide 和 inject 主要为高阶插件/组件库提供用例。并不推荐直接用于应用程序代码中。

    特点

    这对选项需要一起使用,以允许一个祖先组件向其所有子孙后代注入一个依赖,不论组件层次有多深,并在起上下游关系成立的时间里始终生效。

    格式

    provide 选项应该是一个对象或返回一个对象的函数。该对象包含可注入其子孙的属性。

    inject 选项应该是:

    • 一个字符串数组
    • 一个对象,对象的 key 是本地的绑定名(自定义的一个名字),value 是:
      在provide传过来的值(字符串或 Symbol),或
      一个对象,该对象的:
      from 属性是provide传过来的 (字符串或 Symbol)
      default 属性是降级情况下使用的 value

    示例:

    父组件

    <template>
      <div>
        <h1>HelloWorld</h1>
        <One></One>
      </div>
    </template>
    
    <script>
    import One from "./One";
    export default {
      components: { One },
      // provide: {
      //   for: "这是父组件的provide"
      // }
      provide() {
        return {
          for: "这是父组件的provide"
        };
      }
    };
    </script>
    

    子组件1:

    <template>
      <div>
        <h2>childOne组件</h2>
        {{demo}}
        <Two></Two>
      </div>
    </template>
    
    <script>
    import Two from "./Two.vue";
    export default {
      name: "One",
      // inject: ["for"],
      inject: {
        for: {
          default: () => ({})
        }
      },
      data() {
        return {
          demo: this.for
        };
      },
      components: {
        Two
      }
    };
    </script>
    

    子组件2:

    <template>
      <div>
        <h2>childtwo组件</h2>
        {{demo}}
      </div>
    </template>
    
    <script>
    export default {
      name: "Two",
      // inject: ["for"],
      inject: {
        for: {
          default: () => ({})
        }
      },
      data() {
        return {
          demo: this.for
          // demo: "childTwo"
        };
      }
    };
    </script>
    

    此时,两个子组件均会收到父组件传递的数据:
    在这里插入图片描述

  • 相关阅读:
    您上次已将进行的搜狗输入法的安装或卸载,操作要求重启。您在重启之后才能继续新的输入法安装卸载程序。
    CUDPP主页
    cudaMemcpy2D介绍
    cudaMallocPitch – 向GPU分配存储器
    leanote开源云笔记
    OpenMP常用函数
    PRmakefile文件
    安装gcc,g++
    Getting aCC Error :name followed by "::" must be a class or namespace name"
    acc_set_device_num && acc_get_device_num例程
  • 原文地址:https://www.cnblogs.com/lvonve/p/14180251.html
Copyright © 2011-2022 走看看