组件通信$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>
相关推荐
We་ct33 分钟前
深度剖析浏览器跨域问题
开发语言·前端·浏览器·跨域·cors·同源·浏览器跨域
skywalk816341 分钟前
在考虑双轨制,即在中文语法的基础上,加上数学公式的支持,这样像很多计算将更加简单方便,就像现在的小学数学课本里面一样,比如:定x=2*x + 1
开发语言
小书房44 分钟前
Kotlin的by
android·开发语言·kotlin·委托·by
weixin_427771611 小时前
前端调试隐藏元素
前端
就叫飞六吧1 小时前
QT写一个桌面程序exe并动态打包基本流程(c++)
开发语言·c++
threelab1 小时前
Three.js 代码云效果 | 三维可视化 / AI 提示词
开发语言·javascript·人工智能
V搜xhliang02461 小时前
OpenClaw科研全场景用法:从文献到实验室的完整自动化方案
运维·开发语言·人工智能·python·算法·microsoft·自动化
kaikaile19951 小时前
风、浪、流环境模型的船舶三自由度(纵荡、横荡、艏摇)运动仿真MATLAB
开发语言·人工智能·matlab
fish_xk1 小时前
map和set
java·开发语言
李崧正2 小时前
Java技术分享:Lambda表达式与函数式编程
java·开发语言·python