我会尽力帮助你的。我会给你一个关于在组件之间传递数据的例子。
父组件:
<template>
<div>
<h1>Get dropdown value</h1>
<p>You favorite fast food: {{ food }}</p>
<SelectDropDown
label="Select a fast food"
:options="foods"
v-model="food"
autofocus
/>
</div>
</template>
<script>
import SelectDropDown from './SelectDropDown.vue'
export default {
data () {
return {
food: '',
foods: ['Pizza', 'Hamburguer', 'Hot dog']
}
},
components: {
SelectDropDown
}
}
</script>
子组件:
<template>
<div>
<label v-if="label">{{ label }}</label>
<select
class="select"
:value="value"
@input="updateValue"
v-bind="$attrs"
>
<option
v-for="option in options"
:key="option"
:selected="option === value"
:value="option"
>
{{ option }}
</option>
</select>
</div>
</template>
<script>
export default {
inheritAttrs: false,
props: {
options: {
type: Array,
required: true
},
label: {
type: String,
default: ''
},
value: [String, Number]
},
methods: {
updateValue(event) {
this.$emit('input', event.target.value)
}
}
}
</script>
<style scoped>
.select {
margin: 24px;
}
</style>
我从 VueMastery 课程中得到这个:“下一级 Vue”。
子组件:
'inheritAttrs: false':默认情况下,vue 将属性从父标签传递给根子标签(本例中为 div)。通过将 inheritAttrs 设置为 false,我们可以在 select 标签中使用 v-bind="$attrs" 将占位符传递给 select 标签而不是 div 标签。在此示例中,自动对焦应用于 select 标签而不是 div 标签,因此 html 属性传递到我们想要它们的位置。
更多信息:https://vuejs.org/v2/api/#inheritAttrs
道具:
options:它被设置为一个数组(你可以使用一个对象,但它需要一些额外的逻辑来处理它),根组件在这种情况下使用 :options='categories' 发送选项
label:它被设置为一个空字符串,但是我们可以在根组件中使用带有 :label='Your favorite food' 的 props 来传递标签。
value:被选择的选项的值,用于向/从父级发送/接收值,在这种情况下可以是字符串或数字。
方法:
updateValue(event) {
this.$emit('input', event.target.value)
}
在@input 事件上调用此方法。 updateValue 接收正在发生的事件并向父级发送一个名为 input 的事件,并传递一个有效负载 (event.target.value)。在根父节点中,当接收到输入事件时,v-model 正在更新,在这种情况下,有效负载将设置类别数据属性。如果您在根父级中为类别属性设置默认值,则该值将作为 value 属性发送给子级。
父组件:
您只需要导入和使用该组件。 :label 会将一个字符串传递给子组件中的标签标签。应用了自动对焦,因为 inheritAttrs 设置为 false。
欢迎提问!
我试图仔细解释,我不是英语母语人士,所以可能有一些语法错误或者我不够清楚,也许我没有明白你的意思XD,但我希望这可以帮助你.