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方法,是推荐的用法。

    就是这么简单,你学废了吗?感觉有用的话,给笔者点个赞吧 !
  • 相关阅读:
    树系列学习--树的定义(-)
    idea live template高级知识, 进阶(给方法,类,js方法添加注释)(二)
    mysql 查询所有子节点的相关数据
    maven util 类 添加 service
    idea live template高级知识, 进阶(给方法,类,js方法添加注释)
    idea live template
    eclipse 好用的插件总结
    Spirng+SpringMVC+Maven+Mybatis+MySQL项目搭建
    Mac OS 的命令行 总结
    jsp,jquery,spring mvc 实现导出文件
  • 原文地址:https://www.cnblogs.com/zys2019/p/14935079.html
Copyright © 2011-2022 走看看