显示数据时 Vuejs v-for 和 v-if 发出警告
2019-08-28
1662
我在当前项目中使用 laravel 和 vuejs。当我要渲染组件中的数据时,它会显示我的数据,但在我的编辑器中会出现警告 我并不介意,因为它运行得很好。我试图修复它,但我找不到解决方案。有人知道我该怎么办吗?
这是警告消息。
[vue/no-use-v-if-with-v-for]
“v-for”指令内的“rooms”变量应该替换为返回过滤数组的计算属性。您不应将“v-for”与“v-if”混合使用。
`
提前致谢!
Reservations.vue
<div class="tab-pane" id="tab_2">
<form @submit.prevent="login" @keydown="form.onKeydown($event)">
<div class="form-group">
<label>Guest Id</label>
<select class="form-control">
<option v-for="guest in guests" :key="guest.guest_id">{{guest.guest_id}} - {{guest.first_name}} {{guest.last_name}}</option>
</select>
</div>
<div class="form-group">
<label>Room Id</label>
<select class="form-control" >
<option v-for="room in rooms" :key="room.room_id" v-if="room.status === 'Unavailable'">{{room.room_id}} - {{room.status}}</option>
</select>
</div>
</form>
</div>
以下脚本:
<script>
export default {
data(){
return {
reservations: {},
guests: {},
rooms: {},
form: new Form ({
guest_id: '',
room_id: '',
reservation_date: '',
check_in:'',
check_out: '',
persons: '',
})
}
},
methods:{
getReservations(){
axios.get('api/reservation')
.then(({data}) => (this.reservations = data))
},
addReservations(){
this.form.post('api/reservation')
.then(()=>{
alert('success')
})
},
getGuests(){
axios.get('api/guest')
.then(({data}) => (this.guests = data))
},
getRooms(){
axios.get('api/room')
.then(({data}) => (this.rooms = data))
}
},
computed: {
},
created() {
this.getRooms()
this.getReservations()
this.getGuests()
console.log('Component mounted.')
}
}
</script>
2个回答
您应该分离您的逻辑以不在 v-for 中使用 v-if,您可以在类似
<select class="form-control" >
<option v-for="room in filteredRooms" :key="room.room_id">
{{room.room_id}} - {{room.status}}
</option>
</select>
data(){
return
rooms:[
{status: 'Unavailable'},
{status: 'Available'}
]
}
},
computed: {
filteredRooms: function () {
// will return [{status: 'Available'}]
return this.rooms.filter(room => room.status !== 'Unavailable')
}
}
的 compoted 属性中执行此操作
onuriltan
2019-08-28
替换此内容:
<option v-for="room in rooms" :key="room.room_id" v-if="room.status === 'Unavailable'">{{room.room_id}} - {{room.status}}</option>
替换为:
<option v-for="room in unavailableRooms" :key="room.room_id">{{room.room_id}} - {{room.status}}</option>
其中
unavailableRooms
是一个计算属性,例如:
// other hooks
computed: {
unavailableRooms() {
return this.rooms.filter(room => room.status === 'Unavailable');
},
},
就是这样!现在您的
script
部分执行逻辑,并且您的模板比以前更简洁。
Matheus Valenza
2019-08-28