组件通信$refs | $parent |$root

父组件传值子组件用Props

子组件传值父组件用$emit

父组件直接还可以直接取子组件的值用$refs

父组件直接从子子组件中获取值$refs

不建议使用会增加组件之间的耦合度,一般用于第三方插件的封装

ref如果绑定在dom节点上,拿到的就是原生dom节点。

ref如果绑定在组件上,拿到的就是组件对象,可以实现通信功能

父组件

html 复制代码
<template>
  <div>
    <button v-on:click="handelClick">打印看看</button>
    <ChildModule ref="mychild"></ChildModule>
    <input type="text" ref="myinput">
    <div type="text" ref="mydiv">wowo</div>
  </div>
</template>
<script>
import ChildModule from "./components/ChildModule.vue" //导入ChildModule组件模板
export default {
  inheritAttrs: false,
  data() {
    return {
 
    }
  },
  components: {
    ChildModule: ChildModule //注册局部子组件ChildModule:也可以写成ChildModule:ChildModule
  },
  methods: {
    handelClick() {
      console.log(this.$.refs.myinput);
      console.log(this.$.refs.mydiv);
      console.log(this.$.refs.mychild);
 
      this.$.refs.myinput.value="abc";
      this.$.refs.mydiv.style.background='red'; //
      
      this.$refs.mychild.user.name="李四"; //直接获取子组件的user.name值并重新赋值
    }
  }
}
</script>

子组件

html 复制代码
<template>
    <div>
       {{user.name}}
    </div>
</template>
<script>
export default {
  data(){
    return{
        user:{
            name:"张三",
            age:19,
            emial:"abc@123.com"
        }
    }
  },
  methods:{
  
  }
}
</script>

子组件直接从父组件中获取值$parent

子组件直接从根组件中获取值$root

我有三个组件关系如下:根组件app.vue中有一个AChild组件,AChild组件中有一个BChild组件

根组件app.vue

html 复制代码
<template>
  <div>
    <AChild></AChild>
  </div>
</template>
<script>
import AChild from "./components/AChild.vue" //导入AChild组件模板
export default {
  inheritAttrs: false,
  data() {
    return {
      name: "我是根组件name"
    }
  },
  components: {
    AChild
  },
  methods: {
  }
}
</script>

AChild组件

html 复制代码
<template>
    <div>
        <BChild></BChild>
    </div>
</template>
<script>
import BChild from "./BChild.vue" //导入BChild组件模板
export default {
    inheritAttrs: false,
    data() {
        return {
            name: "我是A组件name"
        }
    },
    components: {
        BChild

    },
    methods: {

    }
}
</script>

BChild组件

html 复制代码
<template>
    <div>
        <button @click="handelClick">点我</button>
    </div>
</template>
<script >
export default{
    inheritAttrs:false,
    methods:{
        handelClick(){
           console.log( this.$parent.name); //获取父组件的name
           console.log( this.$parent.$parent.name); //获取父组件的父组件的name
           console.log( this.$root.name); //获取根组件的name(这个直接取最上级组件的值)
        }
    }
}
</script>
相关推荐
BinaryBardC1 小时前
Swift语言的网络编程
开发语言·后端·golang
code_shenbing1 小时前
基于 WPF 平台使用纯 C# 制作流体动画
开发语言·c#·wpf
邓熙榆1 小时前
Haskell语言的正则表达式
开发语言·后端·golang
ac-er88882 小时前
Yii框架中的队列:如何实现异步操作
android·开发语言·php
马船长2 小时前
青少年CTF练习平台 PHP的后门
开发语言·php
hefaxiang3 小时前
【C++】函数重载
开发语言·c++·算法
古蓬莱掌管玉米的神4 小时前
vue3语法watch与watchEffect
前端·javascript
落幕4 小时前
C语言-构造数据类型
c语言·开发语言
林涧泣4 小时前
【Uniapp-Vue3】uni-icons的安装和使用
前端·vue.js·uni-app
雾恋4 小时前
AI导航工具我开源了利用node爬取了几百条数据
前端·开源·github