返回顶部
首页 > 资讯 > 精选 >vue3 $attrs和inheritAttrs怎么用
  • 441
分享到

vue3 $attrs和inheritAttrs怎么用

2023-06-30 11:06:06 441人浏览 安东尼
摘要

今天小编给大家分享一下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 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怎么用”这篇文章的所有内容,感谢各位的阅读!相信大家阅读完这篇文章都有很大的收获,小编每天都会为大家更新不同的知识,如果还想学习更多的知识,请关注编程网精选频道。

    --结束END--

    本文标题: vue3 $attrs和inheritAttrs怎么用

    本文链接: https://lsjlt.com/news/328405.html(转载时请注明来源链接)

    有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

    猜你喜欢
    • vue3 $attrs和inheritAttrs怎么用
      今天小编给大家分享一下vue3 $attrs和inheritAttrs怎么用的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解...
      99+
      2023-06-30
    • vue3$attrs和inheritAttrs的用法说明
      目录$attrs和inheritAttrs用法在父组件app.vue中子组件 myInput.vue 设置 inheritAttrs: true(默认)子组件 myInput.vue...
      99+
      2024-04-02
    • vue3中$attrs的变化与inheritAttrs的使用详解
      目录在vue3中的$attrs的变化在vue2中的$attrs父组件的属性直接渲染在根节点上在vue3中的$attrs的变化 $listeners已被删除合并到$attrs中。 $a...
      99+
      2022-11-13
      vue3 $attrs与inheritAttrs的使用 vue3 inheritAttrs使用
    • vue $attrs怎么使用
      本文小编为大家详细介绍“vue $attrs怎么使用”,内容详细,步骤清晰,细节处理妥当,希望这篇“vue $attrs怎么使用”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。$attrs的使用...
      99+
      2023-06-30
    • Vue中$attrs与$listeners怎么使用
      本篇内容主要讲解“Vue中$attrs与$listeners怎么使用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Vue中$attrs与$listeners怎么使用”吧!介绍$attrs继承所有...
      99+
      2023-06-21
    • vue$attrs和$listeners的使用与区别
      首先让我们看一下这张图,表示了一个多级关联的组件嵌套 为什么要用$attrs 和 $listeners 先让我们来想一种情况,就是组件A跟组件C怎么通信,我们可以有多少中解决方案?...
      99+
      2024-04-02
    • vue3中provide和inject怎么用
      这篇文章将为大家详细讲解有关vue3中provide和inject怎么用,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。provide 和 inject 的讲解provide和inject可以实现嵌套组件之...
      99+
      2023-06-20
    • vue中的$attrs和$listeners属性及用法是什么
      vue中的$attrs和$listeners属性及用法是什么,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。多级组件嵌套需要传递数据时,通常使用的方法是通过vue...
      99+
      2023-06-22
    • Vue3的Watch和computed怎么使用
      本篇内容介绍了“Vue3的Watch和computed怎么使用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成...
      99+
      2024-04-02
    • vue3中provide和inject怎么使用
      本篇内容主要讲解“vue3中provide和inject怎么使用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“vue3中provide和inject怎么使用”吧!前言:在父子组件传递数据时,通常...
      99+
      2023-06-21
    • vue3中watch和watchEffect怎么使用
      这篇文章主要讲解了“vue3中watch和watchEffect怎么使用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“vue3中watch和watchEffect怎么使用”吧!一、watch...
      99+
      2023-06-21
    • vue3中的watch和watchEffect怎么用
      本篇内容介绍了“vue3中的watch和watchEffect怎么用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!首先总结一下两者的区别:w...
      99+
      2023-06-30
    • vue3中ref和reactive怎么使用
      这篇“vue3中ref和reactive怎么使用”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“vue3中ref和reacti...
      99+
      2023-07-05
    • Vue3中props和emit怎么使用
      这篇文章主要介绍“Vue3中props和emit怎么使用”,在日常操作中,相信很多人在Vue3中props和emit怎么使用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Vue3中props和emit怎么使用...
      99+
      2023-07-05
    • Vue中$attrs和$listeners详解以及使用方法
      目录Vue中 常见的组件通信方式可分为三类1. 前言2. 知识点3. 示例总结 传送门:Vue中 子组件向父组件传值 及 .sync 修饰符 详解传送门:Vue中 状态管理...
      99+
      2022-11-16
      vue $attrs $listeners vue $attrs $listeners属性
    • 详解Vue中$props、$attrs和$listeners的使用方法
      目录背景一、文档描述二、具体使用三、总结背景 现在我们来讨论一种情况,父组件与孙子组件怎么通信,我们有多少种解决方案? 我们使用VueX来进行数据管理,但是如果项目中多个组件共享状态...
      99+
      2024-04-02
    • VUE3怎么用
      这篇文章主要介绍了VUE3怎么用,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。Vue3简介2020年9月18日,Vue.js发布3.0版本,代号:One Piece(海贼王)...
      99+
      2023-06-29
    • 怎么用 Provide 和 Inject 做Vue3插件
      这篇文章主要介绍“怎么用 Provide 和 Inject 做Vue3插件”,在日常操作中,相信很多人在怎么用 Provide 和 Inject 做Vue3插件问题上存在疑惑,小编查阅了各式资料,整理出简单...
      99+
      2024-04-02
    • Vue3中的toRef和toRefs怎么使用
      今天小编给大家分享一下Vue3中的toRef和toRefs怎么使用的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。toRef ...
      99+
      2023-07-05
    • Vue3的CSS Modules和Scope怎么使用
      这篇文章主要讲解了“Vue3的CSS Modules和Scope怎么使用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Vue3的CSS Modules和Scope怎么使用”吧!Css Mod...
      99+
      2023-07-04
    软考高级职称资格查询
    编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
    • 官方手机版

    • 微信公众号

    • 商务合作