zoukankan      html  css  js  c++  java
  • vue的子组件调用父组件的几种方式

    vue的子组件调用父组件的几种方式:

    1.父组件的provide和子组件的inject (https://cn.vuejs.org/v2/api/#provide-inject)

    • 不论组件层次有多深,并在其上下游关系成立的时间里始终生效。

    • provideinject 主要在开发高阶插件/组件库时使用。并不推荐用于普通应用程序代码中。


    2.通过调用this.$parent来调用父级的方法 (https://cn.vuejs.org/v2/api/#vm-parent

    • 在子组件里面 this.$parent 得到的是父组件的实例


    3.子组件对外emit一个方法(https://cn.vuejs.org/v2/api/#vm-emit

    • 子组件先执行自己事件,然后在事件里面通过$emit来实现在父组件中调用接收的函数;

    4.props来接收父组件传入的方法

    5.四种方法的实现例子如下:

    //子组件
    
    <template>
      <div>
         <!-- 1.通过provide和inject来实现子调用父方法 -->
        <span @click="clickFn(1)">click 1.通过provide和inject来实现子调用父方法</span>
        <br>
        <!-- 2.通过调用this.$parent来调用父级的方法 -->
        <span @click="test2">click 2.通过调用this.$parent来调用父级的方法</span>
        <br>
        <!-- 3.通过$emit来实现实际调用父级的方法 -->
        <span @click="test3">click 3.通过$emit来实现实际调用父级的方法</span>
        <br>
        <!-- 4.通过props来接收父组件传入的方法 -->
        <span @click="test4(4)">click 4.通过props来接收父组件传入的方法</span>
      </div>
    </template>
    <script>
    export default {
      inject:['clickFn'],
      props:{
        test4:{
          type:Function,
          default(){
            return function(){}
          }
        }
      },
      methods:{
        test2(){
          this.$parent.toAlert(2)
        },
        test3(){
          this.$emit("test3")
        }
      }
    }
    </script>
    // 父组件
    
    <template>
        <div>
           <child @test3="toAlert(3)" :test4="toAlert" />
        </div>
    </template>
    <script>
       import Child from './child'
        export default {
          // provide:{ //如果是对象的类型在里面不能用this会找不到,只有是函数类型才可以
          //   clickFn:"66"
          // },
          provide(){//在这里对外提供方法,在子孙组件中都可以用这个
            return {
               clickFn:this.toAlert
            }
          },
          components:{
            Child
          },
          methods:{
            toAlert(count){
              alert(count||1)
            }
          }
        }
    </script>
     
  • 相关阅读:
    DOM练习2动态增删表格行
    JS
    JS动态获取当前时间,并写到指定的区域
    DOM练习3选项批量移动
    JS练习显示隐藏图像
    修改MyEclipse默认工作路径
    Aptana 安装与配置
    DOM入门基本概念
    SecureCRT终端显示gcc编译错误提示乱码问题
    使用静态成员函数的一个错误。
  • 原文地址:https://www.cnblogs.com/chun321/p/13613931.html
Copyright © 2011-2022 走看看