[英]Using vue-multiselect as an input field with laravel
我需要在一个表单中选择多个用户。 所以我选择了一个名为vue-multiselect的 vue 组件。 但我不知道如何在$request
数组中接收所选用户的 ID。
这就是我使用组件的方式:
<multiselect
v-model="selected"
:options="users"
:multiple="true"
track-by="id"
@open="getUsers"
:custom-label="customLabel"
>
</multiselect>
我将options
绑定到一个名为users
的对象数组,然后将选定的用户推送到selected
道具。
getUsers
方法执行 axios ajax 调用以将所有用户提取到users
数组。
我尝试在表单中插入一个隐藏的输入字段,并将其 v-modeled 到选定的道具:
<input type="hidden" name="users" v-model="selected">
但是当表单被提交并且我在我的 Laravel 控制器中添加了请求数组时:
dd(request()->all());
request('users')
包含值: [object Object]
,这绝对不是我所期望的。
如何获取所有选定用户的 ID?
您需要为您的解决方案使用计算域,例如:
<multiselect
v-model="selected"
:options="users"
:multiple="true"
track-by="id"
@open="getUsers"
:custom-label="customLabel"
>
</multiselect>
<input type="hidden" name="users" :value="selectedUsers">
例如计算字段:
computed: {
selectedUsers: function () {
let selectedUsers = [];
this.selected.forEach((item) => {
selectedUsers.push(item.id);
});
return selectedUsers;
}
},
当您发送请求时,您将看到:
'users' => string '114,159' (length=7)
祝你好运
我假设数据users
是这样的对象数组
let users = [
{id: 1, name: "john"},
{id: 2, name: "steve"}
];
然后这可以解决您的问题:
<multiselect
v-model="user"
name="userid"
:options="types.map(type => type.id)"
:custom-label="opt => types.find(x => x.id == opt).name">
</multiselect>
这个修复的想法是,多options
属性将成为一个普通的 id 数组。 那么v-model
是一个普通属性,会正常提交。 :custom-label
将通过您的用户列表为每个选择的项目迭代。 因此,如果您选择的条目少于 100 个,我猜这只是一个好主意。
它实际上仍在争论如何在https://github.com/shentao/vue-multiselect/issues/432上完成。
但是,似乎最好的解决方案是options
属性不应是对象列表。 这意味着trackBy
应该使用trackBy
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.