指的是父组件传递给子组件的属性,在子组件中并没有通过props
或emits
声明或者v-on
绑定的事件
class
style
@[FnName]
vue<script setup lang="ts"> import AboutView from './views/AboutView.vue'; </script> <template> <AboutView class="aboutByFather" :style="{'width':'100%'}"/> </template>
html<div id="app" data-v-app="">
<div data-v-7a7a37b1="" class="About aboutByFather" style="width: 100%">
...
</div>
</div>
通过创建单独的script
块并默认导出inheritAttrs:false
实现禁用透传
tsInternal server error: [@vue/compiler-sfc] <script> and <script setup> must have the same language type.
lang
语言和最开始的一致vue<template> <div class="About"> ... </div> </template> <script setup lang="ts"> ... </script> <script lang="ts"> export default { inheritAttrs: false } </script>
html<div id="app" data-v-app="">
<div data-v-7a7a37b1="" class="About">
...
<div>
</div>
在阻止透传的基础上,可以通过$attrs
对象获取到除了props
和emits
外的所有属性,如: Class、style和v-on
绑定的事件
vue<template> <div class="About"> <div v-bind="$attrs"> <input type="text" v-model="name" /> <p>{{ name }}</p> </div> </div> </template> <script setup lang="ts"> ... </script> <script lang="ts"> // 使用普通的 <script> 来声明选项 export default { inheritAttrs: false } </script>
html<div id="app" data-v-app="">
<div data-v-7a7a37b1="" class="About">
<div class="aboutByFather" style="width: 100%;">
...
</div>
</div>
</div>
通过useAttrs
获取,获取的是最新的,但是出于性能考虑这个对象并不是响应式对象。如果需要保持响应式,则需要使用props
或在onUpdated()
中每次重新获取
vue... <script setup lang="ts"> import { useAttrs } from 'vue' const attrs = useAttrs() </script>
本文作者:RKLS
本文链接:
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!