首页 > 其他分享 >vue中attrs的使用

vue中attrs的使用

时间:2023-10-30 16:15:16浏览次数:21  
标签:vue grandSon default 使用 son attrs props 组件

vue中attrs的使用

1.attrs的作用

  • 用来进行子孙组件之间的数据传递
  • 接收父组件传过来,但是又没有在props中定义的数据。(class及style除外)

2.父子组件之间数据传递的用法

爷爷组件-grandpa:

<template>
  <div>
    <span>爷爷</span>
    <Son
      :phone="phone"
      sex="男"
      name="张三"
      :age="age"
      style="color: red;"
      class="son"
    />
  </div>
</template>

<script>
import Son from "./son.vue";
export default {
  components: { Son },
  data() {
    return {
      phone: 13212345678,
      age: 34
    };
  }
};
</script>

<style>
.son {
  font-size: 24px;
}
</style>

儿子组件-son:

<template>
  <div>
    <span>儿子-{{ name }} -{{ $attrs.phone }}</span>
  </div>
</template>

<script>
export default {
  // props中定义的数据
  props: {
    name: {
      type: String,
      required: true, //必传
      default: "张三丰" //如果没有父组件传值时默认显示这个
    },
    age: {
      type: Number,
      default() {
        return 36;
      }
    }
  },
  mounted() {
    console.log("son", this.name, this.age, this.$attrs);
  }
};
</script>

<style></style>

son组件中打印的内容:

image

页面显示效果:

image

总结:

  • grandpa组件传过来的数据,如果没有在props中定义,那么数据可以通过this.$attrs获取。
  • attrs中的数据会显示到组件的dom根节点上。
  • 爷爷组件传过来的class及style,不会出现在attrs中,但是会显示到dom根节点上。

3.inheritAttrs-控制组件的根元素是否继承特性

// 不想继承所有父组件的内容,同时也不在组件根元素dom上显示属性
inheritAttrs: false,

在son组件中加入上面代码,则attrs中继承到的grandpa组件传过来的数据就不会在根节点上显示,但是this.$attrs获取到的里面的内容并不会变。

组件打印内容:

image

页面展示效果:

image

4.爷孙组件之间数据传递的用法

儿子组件-son:

给GrandSon使用v-bind="$attrs"绑定一下attrs中的数据,这样GrandSon组件中就能获取到

<template>
  <div>
    <span>儿子-{{ name }} -{{ $attrs.phone }}</span>
    <GrandSon v-bind="$attrs" />
  </div>
</template>

<script>
import GrandSon from "./grandSon.vue";
export default {
  // 不想继承所有父组件的内容,同时也不在组件根元素dom上显示属性
  inheritAttrs: false,
  components: { GrandSon },
  props: {
    name: {
      type: String,
      required: true, //必传
      default: "张三丰" //如果没有父组件传值时默认显示这个
    },
    age: {
      type: Number,
      default() {
        return 36;
      }
    }
  },
  mounted() {
    console.log("son", this.name, this.age, this.$attrs);
  }
};
</script>

<style></style>

4.1通过this.attrs获取数据

孙子组件-grandSon:

<template>
  <div>孙子</div>
</template>

<script>
export default {
  mounted() {
    console.log("grandSon", this.$attrs);
  }
};
</script>

<style></style>

页面展示效果:

grandpa组件传过来的数据会显示到grandSon组件的根节点上

image

组件打印内容:

在grandSon组件中通过this.$attrs可以获取到grandpa组件传过来的数据

image

4.2通过props获取数据

孙子组件中同样可以通过props的形式获取到传过来的数据

孙子组件-grandSon:

<template>
  <div>孙子</div>
</template>

<script>
export default {
  props: {
    phone: {
      type: Number
    },
    sex: {
      type: String
    }
  },
  mounted() {
    console.log("grandSon", this.$attrs, this.phone,this.sex);
  }
};
</script>

<style></style>

页面展示效果:

image

组件打印内容:

image

标签:vue,grandSon,default,使用,son,attrs,props,组件
From: https://www.cnblogs.com/domin520Jian/p/17798079.html

相关文章

  • 在多线程里面,为什么推荐使用notifyAll而不是notify
    在多线程里面,为什么推荐使用notifyAll而不是notify?结论:notify容易造成死锁1、无论使用notify或者notifyAll,都是随机唤醒线程2、notify是随机唤醒一个线程去执行,noifyAll是唤醒所有线程,然后去抢占锁,去执行怎么产生死锁现象:P–生产者调用putproductC–消费者调用c......
  • 使用c#在指定的时间内等待函数执行结果
    在指定的时间内等待某个函数的执行结果的方法。该方法接受三个参数:等待的最大时间、等待的频率和要等待的函数。方法会在指定的时间内每隔一定频率检查函数的执行结果,如果在等待时间内函数返回了true,则表示等待成功,返回true;如果超过等待时间仍未返回true,则表示等待失败,返回false。......
  • PostgreSQL(kingbaseES) 中,可以使用 unnest 函数将一个包含多个值的字符串分割成多行
    在PostgreSQL中,您可以使用unnest函数将一个包含多个值的字符串分割成多行。unnest函数将一个数组(或者像我们的情况下是由STRING_TO_ARRAY函数生成的数组)展开为多行数据。假设您有一个表my_table,其中包含一个名为my_column的字符串列,其内容如下:my_column-----------......
  • 使用 Java 对比两个PDF文档之间的差异
    不论是在团队写作还是在个人工作中,PDF文档往往会经过多次修订和更新。掌握PDF文档内容的变化对于管理文档有极大的帮助。通过对比PDF文档,用户可以快速找出文档增加、删除和修改的内容,更好地了解文档的演变过程,轻松地管理文档。本文将介绍如何在Java程序中通过代码快速比较......
  • 使用c#在指定的时间内等待函数执行结果
    在指定的时间内等待某个函数的执行结果的方法。该方法接受三个参数:等待的最大时间、等待的频率和要等待的函数。方法会在指定的时间内每隔一定频率检查函数的执行结果,如果在等待时间内函数返回了true,则表示等待成功,返回true;如果超过等待时间仍未返回true,则表示等待失败,返回false。......
  • vue3 + vite 的Excel表格的导入导出
    一、安装XLSX插件yarnaddxlsx或者npmixlsx二、引入插件在你需要的页面或者在main.js中引入import*asXLSXfrom'xlsx'三、导出Excel3.1核心api①xlsx.utils.book_new() 新建工作簿② xlsx.uti......
  • 实际项目中如何使用Git做分支管理
    前言记得刚工作的时候根本不知道什么是版本管理工具,有一次和别人聊天,人家问你们公司代码用什么版本管理工具?我说啥是版本管理工具,我们一般用U盘拷贝,然后人家就顾左右而言他了。后来我知道了有个东西叫`SVN`,后来又知道了还有个东西叫`Git`。所以说刚毕业的同学一定要优先进入专业......
  • Arthas的使用并对JVM监控
    Arthas是Alibaba开源的Java诊断工具,可以查看Java进程的一些信息,例如运行情况、JVM相关参数、线程等信息,采用命令行交互模式,在Linux用着十分方便。安装在Linux系统中,首先创建一个文件下,然后在该文件下执行如下命令:curl-Lhttps://alibaba.github.io/arthas/install.sh|sh......
  • Vue2 实现印章徽章组件
    Vue2实现印章徽章组件需要实现的组件效果:该组件有设置颜色、大小、旋转度数和文本内容功能。一、组件实现代码<template><divclass="first-ring"v-bind="getBindValue":class="getStampBadgeClass":style="{transform:`rotate(${rotate}deg)`}&qu......
  • c#使用委托执行带有超时检查的方法
    namespaceTimeOutHelper{internalclassProgram{//定义一个泛型委托,用于定义带有超时检查的方法的签名publicdelegateTRTimeOutDelegate<inT,outTR>(Tparam);privatestaticvoidMain(){Dictionary<Guid,string>result;//调用Timeo......