我正在编写一个编辑表单,碰巧我有几个选项可供选择,这些选项是由带有axios的ajax获得的,我将它们分配给组件的变量permisos
,后者通过v-呈现for,checked元素我在数组selected
中将它们分配给vue模型,如下所示
<div class="row">
<div v-for="permiso in permisos" class="col-md-5 col-12 col-sm-5" >
<input type="checkbox" :value="permiso.id"
class="form-control" :id=permiso.id
v-model="selected" :checked=selected.filter(e => e.id === permiso.id).length > 0 > {{ permiso.name}}
</div>
</div>
稍后我再做一个ajax调用,知道在编辑项目之前我有哪些选项,知道我将分配check属性的选项或复选框,这是我遇到问题时无法正确检查。
axios.get('api/allpermisos')
.then(response =>{
this.permisos = response.data; //dataok
})
if(this.action===2){
axios.get('api/allpermisos/'+ this.dataobject.id)
.then(response =>{
this.selected = response.data;//data ok
})
}
我怎么能这样做,当我从已经选择的选项中获得ajax调用时,将自动分配选中的属性,而不分配那些未分配的属性。试试包含,但我没有想要的结果?
如果删除v模型,代码可以正常工作。为什么会这样?
<input type="checkbox" :value="permiso.id" class="form-control"
:id=permiso.id :checked=selected.filter(e => e.id === permiso.id).length > 0 > {{ permiso.name}}
答案 0 :(得分:3)
您不需要v-model和:checked。 v-model is a two way binding
https://jsfiddle.net/bbsimonbb/eywraw8t/15613/
<div v-for="permiso in permisos" class="col-md-5 col-12 col-sm-5" >
<input type="checkbox" :value="permiso.id"
class="form-control" :id=permiso.id
v-model="selected"> {{ permiso.name}}
</div>
考虑为您的输入创建一个组件。在v中的表单输入很快变得复杂。
答案 1 :(得分:2)
你需要将他们的ID保存在“选定”数组中,你可能会保留整个对象,这些对象与我检查的不一致。
HTML:
<div id="app">
<div class="row">
<div v-for="permiso in permisos" class="col-md-5 col-12 col-sm-5" >
<input type="checkbox" :value="permiso.id"
class="form-control" :id=permiso.id
v-model="selected" :checked=selected.includes(permiso.id)> {{ permiso.name}}
</div>
</div>
</div>
Vue的:
new Vue({
el: '#app',
data() {
return {
selected: [2, 4],
permisos: [{id: 1, name: "test1"}, {id: 2, name: "test2"}, {id: 3, name: "test3"}, {id: 4, name: "test4"}]
}
}
})
https://jsfiddle.net/eywraw8t/15555/
这很有效。 如果您将对象数组作为响应,则可以执行以下操作:
this.selected = response.data.map(obj => obj.id);