• 组件通信$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对象四大引用案例
    CRM与销售能力自动化SFA的关系
    daisyUI - 主题漂亮、代码纯净,免费开源的 Tailwind CSS 组件库,不需要堆砌 class 名
    老知识复盘-SQL从提交到执行到底经历了什么 | 京东云技术团队
    leetcode 43.字符串相乘
    教程详解 | 用 PaddleOCR 进行集装箱箱号检测识别
    C++11单例模式
    前端常用网站
    Python、C、C扩展、Cython 差异对比,98%的人都不知道
    [2022-11-28]神经网络与深度学习 hw10 - LSTM和GRU
  • 原文地址:https://blog.csdn.net/Fanbin168/article/details/134000051