zoukankan      html  css  js  c++  java
  • Vue中inject与provide的用法

    provide/inject提供了一种新的组件间通信的方法。它允许父组件向子孙组件间进行跨层级的数据分发,但是provide/inject是非响应式的。一般用于子组件调用父组件的共有方法。它们两个需要一起使用,允许一个祖先组件向其所有子孙后代注入一个依赖,不论组件层次有多深,并在起上下游关系成立的时间里始终生效。

    实例如下:

    Test.vue:

    <template>
      <div class="about">
        <h1>我是父组件:{{msg}}</h1>
        <button @click="changeMsg">点位改变</button>
        <test2></test2>
      </div>
    </template>
    
    <script>
    import test2 from "./Test2";
    export default {
      name: "Test",
      data() {
        return {
          msg: "你好啊"
        };
      },
      //给子组件传递数据和方法
      provide() {
        return {
          msg: this.msg,
          messageBox: this.messageBox
          
        };
      },
      components: {
        test2
      },
      methods: {
        changeMsg() {
          this.msg = "今天天气转暖";
        },
        messageBox(msg){
          alert(msg)
        }
      }
    };
    </script>
    
    <style>
    </style>

    Test2.vue:

    <template>
      <div><h3>我是子组件</h3>{{msg}}
      <button @click="message">我要执行父组件的方法</button>
      </div>
    </template>
    
    <script>
    export default {
        name:'Test2',
        //接收父组件的数据
        inject:['msg','messageBox'],
        methods:{
            message(){
                this.messageBox('我是子组件')
            }
        }
       
    }
    </script>
    
    <style>
    
    </style>

    当点击父组件中的按钮时,父组件中的msg已经改变,但是子组件中接收的数据并未发生变化。这就说明这种方式共享数据不是响应式的,一般不使用这种方式传递数据。
    当点击子组件中的按钮时,会执行父组件的messageBox方法,是推荐的用法。

    就是这么简单,你学废了吗?感觉有用的话,给笔者点个赞吧 !
  • 相关阅读:
    循环获取数据
    implode
    获取二维数组中的值
    根据id获取某一类的最大最小值
    array_column的作用
    用curl模拟夹带cookie的http请求
    phpunit——执行测试文件和测试文件中的某一个函数
    call_user_func
    9 [面向对象]-内置方法
    8 [面向对象]-反射
  • 原文地址:https://www.cnblogs.com/zys2019/p/14935079.html
Copyright © 2011-2022 走看看