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


    父组件传值子组件用Props

    子组件传值父组件用$emit

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

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

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

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

    父组件

    1. <template>
    2. <div>
    3. <button v-on:click="handelClick">打印看看button>
    4. <ChildModule ref="mychild">ChildModule>
    5. <input type="text" ref="myinput">
    6. <div type="text" ref="mydiv">wowodiv>
    7. div>
    8. template>
    9. <script>
    10. import ChildModule from "./components/ChildModule.vue" //导入ChildModule组件模板
    11. export default {
    12. inheritAttrs: false,
    13. data() {
    14. return {
    15. }
    16. },
    17. components: {
    18. ChildModule: ChildModule //注册局部子组件ChildModule:也可以写成ChildModule:ChildModule
    19. },
    20. methods: {
    21. handelClick() {
    22. console.log(this.$.refs.myinput);
    23. console.log(this.$.refs.mydiv);
    24. console.log(this.$.refs.mychild);
    25. this.$.refs.myinput.value="abc";
    26. this.$.refs.mydiv.style.background='red'; //
    27. this.$refs.mychild.user.name="李四"; //直接获取子组件的user.name值并重新赋值
    28. }
    29. }
    30. }
    31. script>

    子组件

    1. <template>
    2. <div>
    3. {{user.name}}
    4. div>
    5. template>
    6. <script>
    7. export default {
    8. data(){
    9. return{
    10. user:{
    11. name:"张三",
    12. age:19,
    13. emial:"abc@123.com"
    14. }
    15. }
    16. },
    17. methods:{
    18. }
    19. }
    20. script>

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

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

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

    根组件app.vue

    1. <template>
    2. <div>
    3. <AChild>AChild>
    4. div>
    5. template>
    6. <script>
    7. import AChild from "./components/AChild.vue" //导入AChild组件模板
    8. export default {
    9. inheritAttrs: false,
    10. data() {
    11. return {
    12. name: "我是根组件name"
    13. }
    14. },
    15. components: {
    16. AChild
    17. },
    18. methods: {
    19. }
    20. }
    21. script>

    AChild组件

    1. <template>
    2. <div>
    3. <BChild>BChild>
    4. div>
    5. template>
    6. <script>
    7. import BChild from "./BChild.vue" //导入BChild组件模板
    8. export default {
    9. inheritAttrs: false,
    10. data() {
    11. return {
    12. name: "我是A组件name"
    13. }
    14. },
    15. components: {
    16. BChild
    17. },
    18. methods: {
    19. }
    20. }
    21. script>

    BChild组件

    1. <template>
    2. <div>
    3. <button @click="handelClick">点我button>
    4. div>
    5. template>
    6. <script >
    7. export default{
    8. inheritAttrs:false,
    9. methods:{
    10. handelClick(){
    11. console.log( this.$parent.name); //获取父组件的name
    12. console.log( this.$parent.$parent.name); //获取父组件的父组件的name
    13. console.log( this.$root.name); //获取根组件的name(这个直接取最上级组件的值)
    14. }
    15. }
    16. }
    17. script>

  • 相关阅读:
    Java 集合之 List
    单商户商城系统功能拆解38—分销应用—分销订单
    ps,查看Linux系统进程信息小帮手-尚文网络xUP楠哥
    带你了解数据分布式存储原理
    NPDP产品经理认证怎么报名?考试难度大吗?
    mysql服务器参数设置
    Web程序设计-实验05 DOM与BOM编程
    汽车Type-C接口:特点与要求解析
    华硕主板升级更新BIOS版本
    【STM32】Cortex_M4 GPIO口概述知识总结
  • 原文地址:https://blog.csdn.net/Fanbin168/article/details/134000051