我的编程空间,编程开发者的网络收藏夹
学习永远不晚

vue3 $attrs和inheritAttrs怎么用

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

vue3 $attrs和inheritAttrs怎么用

今天小编给大家分享一下vue3 $attrs和inheritAttrs怎么用的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。

    $attrs和inheritAttrs用法

    • $attrs属性解释:包含了父作用域中不作为组件 props 或自定义事件的 attribute 绑定和事件。当一个组件没有声明任何prop 时,这里会包含所有父作用域的绑定,并且可以通过 v-bind="$attrs" 传入内部组件——这在创建高阶的组件时会非常有用。

    • inheritAttrs属性解释:如果你不希望组件的根元素继承特性,你可以在组件的选项中设置 inheritAttrs: false

    可能不是很好理解,我们可以举个例子来验证一下。

    在父组件app.vue中

    <template>  <div>    <MyInput type="text" placeholder="输入用户名" v-model="state.text" />    <MyInput type="password" placeholder="输入密码"  v-model="state.pass"  />  </div></template>
    <script setup>import MyInput from "@/components/myInput.vue";import { reactive } from "vue";const state = reactive({  text: "",  pass: "",});</script>

    子组件 myInput.vue 设置 inheritAttrs: true(默认)

    <template>  <div class="input">    <input v-bind="$attrs" v-model="modelValue" />  </div></template>
    <script>export default {  props: {    modelValue: [String, Number],  },};</script>

    vue3 $attrs和inheritAttrs怎么用

    子组件 myInput.vue 设置 inheritAttrs: false

    <template>  <div class="input">    <input v-bind="$attrs" v-model="modelValue"/>  </div></template>
    <script>export default {  inheritAttrs: false,  props: {    modelValue: [String, Number],  },};</script>

    vue3 $attrs和inheritAttrs怎么用

    小结:

    由上述例子可以看出,子组件的props中未注册父组件传递过来的属性。

    • 当设置inheritAttrs:true时,子组件的顶层标签元素中会渲染出父组件传递过来的属性(例如:type="text"等)

    • 当设置inheritAttrs: false时,子组件的顶层标签元素中不会渲染出父组件传递过来的属性

    • 不管inheritAttrs为true或者false,子组件中都能通过$attrs属性获取到父组件中传递过来的属性。

    $attrs和inheritAttrs实例

    官网的文档简短而又不清晰,实在是看不懂,只好自己找代码验证来看看是什么意思:

    <!DOCTYPE html><html lang="en"> <head>    <meta charset="UTF-8">    <meta name="viewport" content="width=device-width, initial-scale=1.0">    <title>Document</title>    <script class="lazy" data-src="https://cdn.bootcdn.net/ajax/libs/vue/3.1.5/vue.global.js"></script></head> <body>    <div id="app">        <father :v1="'value1'" :v2="'value2'" :v3="'value3'"></father>    </div></body> </html>
    <script>const app = Vue.createApp({    data() {        return {}    },})app.component('father', { // inheritAttrs: false,    props: ['v1'],    template: ` <div><p>v1 is {{v1}}</p>  <son v-bind='$attrs' :some="1"></son>       </div>`,    created() {        console.log('father:', this.$attrs)    }})app.component('son', {    // inheritAttrs: false,    props: ['v2'],    template: `<div><p>v2 is {{v2}}</p>                     <grandSon v-bind='$attrs'></grandSon>              </div>`,    created() {        console.log('son:', this.$attrs)    }})app.component('grandSon', {    props: ['v3'],    template: `<p>v3 is {{v3}}</p>`,    created() {        console.log('grandSon:', this.$attrs)    }})app.mount('#app')</script>

    页面显示的结果:

    v1 is value1 

    v2 is value2 

    v3 is value3

    页面源代码:

    <div id="app" data-v-app="">   <div v2="value2" v3="value3"> <!-- 这是father -->      <p>v1 is value1</p>      <div v3="value3" some="1">  <!-- 这是 son-->          <p>v2 is value2</p>           <p some="1">v3 is value3</p>  <!-- 这是 grandSon -->      </div>   </div></div>

    控制台打印是当前组件的$attrs:

    father: Proxy {v2: "value2", v3: "value3", __vInternal: 1}

    son: Proxy {v3: "value3", some: 1, __vInternal: 1}

    grandSon: Proxy {some: 1, __vInternal: 1}

    首选,father组件被传入了3个值,但是实际使用props接收的只有v1,v2和v3作为attributes在DOM里面渲染了。

    vue3 $attrs和inheritAttrs怎么用

    上图的devtool 也可以说明,另外就是控制台也同时证明了。

    同样son组件只是接收v2作为prop:

    vue3 $attrs和inheritAttrs怎么用

    grandSon组件只是接收v3作为prop

    vue3 $attrs和inheritAttrs怎么用

    father prop:v1,attributes: v2,v3

    son prop:v2 ,attributes:v3,some

    grandSon prop:v3,,attributes: some

    发现无论是father传入的3个值v1,v2,v3还是son又传入的值':some=1',

    只要不被prop传入下一层组件,那么一定是在下一层组件的$attrs,也就是说不被作为prop的值会传入下一个组件作为attrs的一员。一个组件的attrs由父组件传递以及自己自带的组合而成。

    上面说的是$attrs,那么inheritAttrs则说的是attrs继承,这里的继承是控制DOM渲染,不继承也就是不渲染了,但是实际还是存在这个attrs的。

    `inheritAttrs`属性默认是true,所以能看到上面的结论,attrs会往下传,当设置为false的时候就不会在DOM渲染从上一层继承来的attrs。

    修改一下代码:

    app.component('father', {   inheritAttrs: false,    // 不继承    props: ['v1'],    template: ` <div><p>v1 is {{v1}}</p>  <son v-bind='$attrs' :some="1"></son>       </div>`,    created() {        console.log('father:', this.$attrs)    }})

    father组件这不继承attrs,控制台的打印没变:

    father: Proxy {v2: "value2", v3: "value3", __vInternal: 1}

    son: Proxy {v3: "value3", some: 1, __vInternal: 1}

    grandSon: Proxy {some: 1, __vInternal: 1}

    devtool这里依然可以看到attrs

    vue3 $attrs和inheritAttrs怎么用

    但是看源代码:

    <div id="app" data-v-app="">  <div>                          <!-- 这里是 father --> <!-- 看这行 -->    <p>v1 is value1</p>    <div v3="value3" some="1">     <!-- 这里是 son-->      <p>v2 is value2</p>      <p some="1">v3 is value3</p>   <!-- 这里是 grandSon-->      </div>    </div></div>

    DOM渲染里面的v2,v3 attrs都不存在了。

    以上就是“vue3 $attrs和inheritAttrs怎么用”这篇文章的所有内容,感谢各位的阅读!相信大家阅读完这篇文章都有很大的收获,小编每天都会为大家更新不同的知识,如果还想学习更多的知识,请关注编程网行业资讯频道。

    免责声明:

    ① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

    ② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

    vue3 $attrs和inheritAttrs怎么用

    下载Word文档到电脑,方便收藏和打印~

    下载Word文档

    猜你喜欢

    vue3 $attrs和inheritAttrs怎么用

    今天小编给大家分享一下vue3 $attrs和inheritAttrs怎么用的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。$
    2023-06-30

    vue3中$attrs的变化与inheritAttrs的使用详解

    $attrs现在包括class和style属性。 也就是说在vue3中$listeners不存在了,vue2中$listeners是单独存在的,在vue3 $attrs包括class和style属性, vue2中 $attrs 不包含class和style属性,这篇文章主要介绍了vue3中$attrs的变化与inheritAttrs的使用 ,需要的朋友可以参考下
    2022-11-13

    vue $attrs怎么使用

    本文小编为大家详细介绍“vue $attrs怎么使用”,内容详细,步骤清晰,细节处理妥当,希望这篇“vue $attrs怎么使用”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。$attrs的使用vue$attrs是
    2023-06-30

    Vue中$attrs与$listeners怎么使用

    本篇内容主要讲解“Vue中$attrs与$listeners怎么使用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Vue中$attrs与$listeners怎么使用”吧!介绍$attrs继承所有
    2023-06-21

    vue中的$attrs和$listeners属性及用法是什么

    vue中的$attrs和$listeners属性及用法是什么,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。多级组件嵌套需要传递数据时,通常使用的方法是通过vue
    2023-06-22

    vue3中provide和inject怎么用

    这篇文章将为大家详细讲解有关vue3中provide和inject怎么用,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。1.provide 和 inject 的讲解provide和inject可以实现嵌套组
    2023-06-20

    vue3中watch和watchEffect怎么使用

    这篇文章主要讲解了“vue3中watch和watchEffect怎么使用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“vue3中watch和watchEffect怎么使用”吧!一、watch
    2023-06-21

    vue3中ref和reactive怎么使用

    这篇“vue3中ref和reactive怎么使用”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“vue3中ref和reacti
    2023-07-05

    vue3中provide和inject怎么使用

    本篇内容主要讲解“vue3中provide和inject怎么使用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“vue3中provide和inject怎么使用”吧!前言:在父子组件传递数据时,通常
    2023-06-21

    vue3中的watch和watchEffect怎么用

    本篇内容介绍了“vue3中的watch和watchEffect怎么用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!首先总结一下两者的区别:1
    2023-06-30

    Vue3中props和emit怎么使用

    这篇文章主要介绍“Vue3中props和emit怎么使用”,在日常操作中,相信很多人在Vue3中props和emit怎么使用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Vue3中props和emit怎么使用
    2023-07-05

    vue3中的watch和computed怎么使用

    一、watch1.检测reactive内部数据{{obj.hobby.eat}}clickimport{watch,reactive}from&#39;vue&#39;exportdefault{name:&#39;App&#39;,setup(){constobj=reactive({name:&#39;ifer&#39;,hobby:{eat:&#39;西瓜&#39;,},})watch(obj,(newValue,oldVal
    2023-05-21

    Vue3的CSS Modules和Scope怎么使用

    这篇文章主要讲解了“Vue3的CSS Modules和Scope怎么使用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Vue3的CSS Modules和Scope怎么使用”吧!Css Mod
    2023-07-04

    VUE3怎么用

    这篇文章主要介绍了VUE3怎么用,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。Vue3简介2020年9月18日,Vue.js发布3.0版本,代号:One Piece(海贼王)
    2023-06-29

    Vue3中的toRef和toRefs怎么使用

    今天小编给大家分享一下Vue3中的toRef和toRefs怎么使用的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。toRef
    2023-07-05

    Vue3中的ref和reactive怎么使用

    今天小编给大家分享一下Vue3中的ref和reactive怎么使用的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。一、是什么r
    2023-07-06

    vue3中setup()和reactive()函数怎么使用

    一、组合式API对比vue2项目结构在vue2当中1.优点:易于学习和使用,写代码的位置已经约定好。2.缺点:对于大型项目,不利于代码的复用、不利于管理和维护。3.解释:同一功能的数据和业务逻辑分散在同一个文件的N个地方,随着业务复杂度的上升,我们需要经常在类似于data()以及methods中进行来回的处理在vue3当中1.优点:可以把同一功能的数据和业务逻辑组织到一起,方便复用和维护。2.缺点:需要有良好的代码组织和拆分能力,相对没有Vue2容易上手。3.解释:注意:为了能让大家较好的过渡到
    2023-05-19

    编程热搜

    • Python 学习之路 - Python
      一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
      Python 学习之路 - Python
    • chatgpt的中文全称是什么
      chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
      chatgpt的中文全称是什么
    • C/C++中extern函数使用详解
    • C/C++可变参数的使用
      可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
      C/C++可变参数的使用
    • css样式文件该放在哪里
    • php中数组下标必须是连续的吗
    • Python 3 教程
      Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
      Python 3 教程
    • Python pip包管理
      一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
      Python pip包管理
    • ubuntu如何重新编译内核
    • 改善Java代码之慎用java动态编译

    目录