首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在vue3组合api中获得道具

如何在vue3组合api中获得道具
EN

Stack Overflow用户
提问于 2022-03-22 09:00:33
回答 3查看 17.2K关注 0票数 12

我尝试编写一个容器组件"A“来布局第三方组件"Tree",为了使用A,我使用"inheritAttrs”来获取“Tree”的所有道具和事件:

代码语言:javascript
复制
<template>
    <Tree v-bind="$attrs" />
</template>
<script lang="ts">
  export default {
    inheritAttrs: true,
  };
</script>
<script lang="ts" setup>
  import { Tree } from 'ant-design-vue';
  import { onMounted, PropType, toRef, unref, ref, toRefs } from 'vue';
  function A() {
      // this is not working
      console.log(props);
   }

</script>

如何从函数A中的“树”继承一些道具?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2022-03-22 09:36:07

'InheritAttrs‘

首先,inheritAttrs并不意味着继承道具,inheritAttrs设置为true意味着您自动继承属性(而不是 props ),并将这些属性绑定到组件的根节点。

什么是“属性”?

一些常见的属性是classstyleiddisabledrequiredminlength属性等等。基本上,所有本机HTML属性都是由inheritAttrs处理的。

如何在props中访问<script setup>对象

在复合API中,您需要显式地定义 <script setup>中的道具,以便能够使用props对象。

在使用<script setup>的单个文件组件中,可以使用defineProps()宏声明道具:

代码语言:javascript
复制
<script setup>
   const props = defineProps(['foo'])

   console.log(props.foo)
</script>

..。

阅读更多信息:如果我有一个与prop同名的attribute怎么办?

让我们树立一个榜样。您可以在disabled中定义一个名为MyComponent.vue的道具。

MyComponent.vue

代码语言:javascript
复制
<template>
   <Tree v-bind="$attrs"/>
</template>
 
<script setup>
   const props =  defineProps({
      disabled: Boolean,
   })
       
   console.log(props.disabled); // this works
</script>

..。然后添加像这样的组件,传入disabled。请注意,在这两种情况下,:disabled="true"disabled的含义是相同的--无论是否定义了道具。

App.vue

代码语言:javascript
复制
<MyComponent disabled />

由于您使用defineProps()定义了道具,所以v-bind="$attrs"将不再将disabled作为$attrs对象中的属性。正如文档所解释的那样:

Vue组件需要显式的道具声明,这样Vue知道传递给组件的外部道具应该被视为.

换句话说,如果您不定义props,它们将被视为attributes

票数 15
EN

Stack Overflow用户

发布于 2022-03-22 09:52:30

您可以使用类型记录和组合API (<script setup lang="ts" />)定义typesafe道具,如:

代码语言:javascript
复制
<script setup lang="ts">
const props = defineProps({
  foo: { type: String, required: true },
  bar: Number
})

props.foo // string
props.bar // number | undefined
</script>

但是,通过泛型类型参数定义纯类型的道具通常要简单得多:

代码语言:javascript
复制
<script setup lang="ts">
interface Props {
  foo: string,
  bar?: number
}
const props = defineProps<Props>()

props.foo // string
props.bar // number | undefined
</script>

文档。如果您也想设置默认值。请参阅这里

票数 2
EN

Stack Overflow用户

发布于 2022-09-16 09:42:29

您还可以使用以下方式:

代码语言:javascript
复制
export default {  
...    
    props:["filterOptions"],
    setup(props, context) {      
     const optionsinProps = props.filterOptions;
    }  
...
 };

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71569344

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档