vue中将父组件的数组传递给子组件,在子组件中v-for循环出来,并默认选中第一项
时间: 2023-11-17 16:08:31 浏览: 89
可以在父组件中通过 props 将数组传递给子组件,然后在子组件中使用 v-for 循环出来,同时使用 v-model 绑定一个选中的值。具体实现如下:
父组件中:
```
<template>
<div>
<child-component :options="options" v-model="selectedOption"></child-component>
</div>
</template>
<script>
export default {
data() {
return {
options: ['option1', 'option2', 'option3'],
selectedOption: 'option1'
}
}
}
</script>
```
子组件中:
```
<template>
<div>
<select v-model="selectedOption">
<option v-for="option in options" :value="option">{{ option }}</option>
</select>
</div>
</template>
<script>
export default {
props: ['options', 'value'],
data() {
return {
selectedOption: ''
}
},
mounted() {
if (this.value) {
this.selectedOption = this.value
} else {
this.selectedOption = this.options[0]
}
},
watch: {
value(newValue) {
this.selectedOption = newValue
}
},
computed: {
listeners() {
return {
...this.$listeners,
input: event => this.$emit('input', event.target.value)
}
}
}
}
</script>
```
在子组件中,我们使用了 v-model 绑定了一个 selectedOption 变量,并在 mounted 钩子函数中判断了 value(也就是父组件中的 v-model 绑定的值)是否存在,如果存在则将其赋值给 selectedOption,否则将 options 数组中的第一个元素作为默认选中项。
同时,我们在子组件中通过 watch 监听了 value 的变化,并在变化时将其赋值给 selectedOption。
最后,我们在 computed 中返回了 listeners 对象,将 input 事件映射到了子组件中的 $emit('input', event.target.value) 方法,这样在父组件中就可以使用 v-model 双向绑定 selectedOption 变量了。
阅读全文