如何在 vue3 的自定义输入字段中获取默认道具?
How do I get default props in custom input field in vue3?
我想像这样制作默认输入的自定义输入组件。
<template>
<input type="text">
</template>
<script>
export default {
name: "CustomInput",
}
</script>
如何在没有定义的情况下自动添加所有默认的道具。例如,如果我在 CustomInput 上设置占位符,那么这个占位符会自动应用于 input ,我不需要在组件 CustomInput 中将占位符写为 prop。
<CustomInput placeholder="test"/>
//it will be apply like
<input placeholder="test"/>
默认情况下,组件的 根元素 自动 inherits attributes 应用于父元素,因此您正在寻找的行为已经发生。要使属性继承起作用,只能有一个根元素。即使是相邻的注释元素也会禁用继承。
<!-- input inherits attributes -->
<template>
<input />
</template>
<!-- No attribute inheritance -->
<template>
<!-- my comment -->
<input />
</template>
<!-- No attribute inheritance -->
<template>
<label for="password">Password</label>
<input id="password" type="password" />
<p>Enter a unique password</p>
</template>
当您不能依赖属性继承时(例如,存在多个根元素,或者目标嵌套在其他元素中),您可以 disable the attribute inheritance 加上 inheritAttrs=false
选项,并使用v-bind="$attrs"
在目标元素上:
<template>
<div>
<label for="password">Password</label>
<input id="password" type="password" v-bind="$attrs" />
<p>Enter a unique password</p>
</div>
</template>
<script>
export default {
inheritAttrs: false,
}
</script>
另请注意,即使 <input>
是单个根元素,v-model
也不会自动用于组件。该组件必须显式实现 v-model
接口(即接收 modelValue
属性,并发出 update:modelValue
事件):
<template>
<input :value="modelValue" @input="$emit('update:modelValue', $event.target.value)" />
</template>
<script>
export default {
name: 'CustomInput',
props: ['modelValue'],
}
</script>
我想像这样制作默认输入的自定义输入组件。
<template>
<input type="text">
</template>
<script>
export default {
name: "CustomInput",
}
</script>
如何在没有定义的情况下自动添加所有默认的道具。例如,如果我在 CustomInput 上设置占位符,那么这个占位符会自动应用于 input ,我不需要在组件 CustomInput 中将占位符写为 prop。
<CustomInput placeholder="test"/>
//it will be apply like
<input placeholder="test"/>
默认情况下,组件的 根元素 自动 inherits attributes 应用于父元素,因此您正在寻找的行为已经发生。要使属性继承起作用,只能有一个根元素。即使是相邻的注释元素也会禁用继承。
<!-- input inherits attributes -->
<template>
<input />
</template>
<!-- No attribute inheritance -->
<template>
<!-- my comment -->
<input />
</template>
<!-- No attribute inheritance -->
<template>
<label for="password">Password</label>
<input id="password" type="password" />
<p>Enter a unique password</p>
</template>
当您不能依赖属性继承时(例如,存在多个根元素,或者目标嵌套在其他元素中),您可以 disable the attribute inheritance 加上 inheritAttrs=false
选项,并使用v-bind="$attrs"
在目标元素上:
<template>
<div>
<label for="password">Password</label>
<input id="password" type="password" v-bind="$attrs" />
<p>Enter a unique password</p>
</div>
</template>
<script>
export default {
inheritAttrs: false,
}
</script>
另请注意,即使 <input>
是单个根元素,v-model
也不会自动用于组件。该组件必须显式实现 v-model
接口(即接收 modelValue
属性,并发出 update:modelValue
事件):
<template>
<input :value="modelValue" @input="$emit('update:modelValue', $event.target.value)" />
</template>
<script>
export default {
name: 'CustomInput',
props: ['modelValue'],
}
</script>