【发布时间】:2021-02-05 21:39:53
【问题描述】:
在上图中,我有两个 v-autocomplete 框,一个用于名称,另一个用于电子邮件。 有没有办法连接两个 v-autocomplete 框,当用户输入姓名或电子邮件信息时,它也会显示另一个框的选项。
在图像中的示例中,用户输入了姓名并获得了结果,我将如何显示该姓名的相应电子邮件?
这是两个 v-autocomplete 框的代码
<v-autocomplete
v-model="item.userId"
:items="allExternalUsers"
:search-input.sync="searchUser"
label="Name"
name="name"
item-value="id"
item-text="name"
filled
dense
hide-details
clearable
autocomplete="off"
@input="updateSelection"
@change="triggerChange"
></v-autocomplete>
<v-autocomplete
v-model="item.email"
:items="allExternalUserEmails"
v-validate="'required|email'"
:error-messages="veeErrors.collect(`${item.id}_email`)"
:search-input.sync="searchEmail"
label="Email"
name="email"
item-value="id"
item-text="email"
filled
dense
hide-details
clearable
autocomplete="off"
></v-autocomplete>
这是我的手表代码
watch: {
searchUser(prefix){
if(prefix && prefix.length > 2){
this.serviceInstance.userService
.getExternalUsers(prefix)
.then(({data}) => {
this.allExternalUsers = data.externalUser.map(element => `${element.firstName} ${element.lastName}`);
this.allExternalUserEmails = data.externalUser.map(element => element.email);
this.over10Results = data.over10Results;
}).catch(error => console.log(error));
}else{
// this.allExternalUsers = [];
// this.clearExternalUsers();
}
},
searchEmail(prefix){
if(prefix && prefix.length > 2){
this.serviceInstance.userService
.getExternalUsers(prefix)
.then(({data}) => {
this.allExternalUsers = data.externalUser.map(element => `${element.firstName} ${element.lastName}`);
this.allExternalUserEmails = data.externalUser.map(element => element.email);
this.over10Results = data.over10Results;
}).catch(error => console.log(error));
}else{
this.allExternalUserEmails = [];
// this.clearExternalUsers();
}
},
这是我的后端调用
async getExternalUsers(prefix) {
const url = `/api/v1/external_user/prefix/${prefix}`;
const method = "GET";
return this.vue.$http.request({ method, url }).then(response => {
return response;
}).catch(error => console.log(error));
}
我使用 Postman 来确保我的后端调用没有问题。
【问题讨论】:
-
我不明白,一个名字可以有多封电子邮件?或者它是 oneToOne 关系,如果您选择一个或另一个,您希望电子邮件或人显示在第二个 v-autocomplete 中?还是您想进行搜索,然后两个自动完成功能同时向您显示可能的结果?
-
@Polybius 是的,它是一对一的关系。我从后端提取用户信息并将其划分为具有用户名的 allExternalUsers 和包含电子邮件的 allExternalUserEmails。我创建了一个代码笔,可以解释更多 codepen.io/aaronk488/pen/MWbKNOq?editors=1011
标签: vue.js vuetify.js v-autocomplete