Vue,仅将选项的值映射到 v-model
Vue, mapping only the value of options to v-model
我有一个 vue-multiselect 实例,我试图以一种方式映射,我可以从我传递给选项的数组的 'contact_data' 索引中获取值并将其存储到没有索引名称的数组。基本上,我需要我的 copyUsers 数组看起来像:
0:
"email@mail.com"
1:
"new@mail.com"
但现在是:
0:
"contact_data":"email@mail.com"
无论如何,我在我的 response.data
对象上使用了扩展运算符,它最初将选项放入我的多选中,但现在我试图映射我的选项索引以仅将值推入阵列,但它不工作,现在我什至没有任何选项显示在我的多选中。
我做错了什么?
<multiselect
v-model="copyUsers"
@search-change="val => searchCopiedUsers(val)"
:options="copyUsersOptions.map(i => i.contact_data)" //changed this from copyUsersOptions
:multiple="true"
:loading="loading"
placeholder="Enter user(s) to be copied"
label="contact_data"
track-by="contact_data">
</multiselect>
data() {
return {
loading: false,
copyUsers: [],
copyUsersOptions: [],
}
},
methods: {
searchCopiedUsers: function(val) {
console.log('searched for', val);
if (val) {
this.loading = true;
axios.get('/ticket/users/search',{params: {query: val}})
.then(response => {
this.copyUsersOptions = [...response.data];
console.info(this.copyUsersOptions);
console.log('here are the users');
console.log(this.copyUsers);
})
.catch(function(error) {
this.loading = false;
// handle error
console.log(error)
})
.finally(function() {
this.loading = false;
})
} else {
this.copyUsersOptions = [];
}
}
}
}
更新:如果我转储完整对象 response.data
1: {contact_data: "test@mail.com"}
2: {contact_data: "johndoe@msn.com"}
3: {contact_data: "res@gmail.com"}
4: {contact_data: "info@globe.net"}
5: {contact_data: "testing@yahoo.com"}
我明白了,我昨天回答你的时候并没有清楚地了解你的数据是什么样子的。
现在了解到您的响应数据看起来像这样
{
1: { contact_data: "test@mail.com" },
2: { contact_data: "johndoe@msn.com" },
3: { contact_data: "res@gmail.com" },
4: { contact_data: "info@globe.net" },
5: { contact_data: "testing@yahoo.com" },
}
我可以看出它是对象的对象。为了将其转换为数组。我们将使用 Object.keys()
.
获取该对象中所有键的数组
根据给定的数据,这将 return
[ 1, 2, 3, 4, 5]
然后我们将使用 map()
遍历 Object.keys()
的数组以创建 contact_data
.
的数组
Object.keys(response.data)
.map((key) => response[key].contact_data)
将它们放在一起,您的 Axios 调用将变为
axios.get('/ticket/users/search',{params: {query: val}})
.then(response => {
this.copyUsersOptions = Object.keys(res.data)
.map((key) =>
response.data[key].contact_data
)
console.info(this.copyUsersOptions);
console.log('here are the users');
console.log(this.copyUsers);
})
我有一个 vue-multiselect 实例,我试图以一种方式映射,我可以从我传递给选项的数组的 'contact_data' 索引中获取值并将其存储到没有索引名称的数组。基本上,我需要我的 copyUsers 数组看起来像:
0:
"email@mail.com"
1:
"new@mail.com"
但现在是:
0:
"contact_data":"email@mail.com"
无论如何,我在我的 response.data
对象上使用了扩展运算符,它最初将选项放入我的多选中,但现在我试图映射我的选项索引以仅将值推入阵列,但它不工作,现在我什至没有任何选项显示在我的多选中。
我做错了什么?
<multiselect
v-model="copyUsers"
@search-change="val => searchCopiedUsers(val)"
:options="copyUsersOptions.map(i => i.contact_data)" //changed this from copyUsersOptions
:multiple="true"
:loading="loading"
placeholder="Enter user(s) to be copied"
label="contact_data"
track-by="contact_data">
</multiselect>
data() {
return {
loading: false,
copyUsers: [],
copyUsersOptions: [],
}
},
methods: {
searchCopiedUsers: function(val) {
console.log('searched for', val);
if (val) {
this.loading = true;
axios.get('/ticket/users/search',{params: {query: val}})
.then(response => {
this.copyUsersOptions = [...response.data];
console.info(this.copyUsersOptions);
console.log('here are the users');
console.log(this.copyUsers);
})
.catch(function(error) {
this.loading = false;
// handle error
console.log(error)
})
.finally(function() {
this.loading = false;
})
} else {
this.copyUsersOptions = [];
}
}
}
}
更新:如果我转储完整对象 response.data
1: {contact_data: "test@mail.com"}
2: {contact_data: "johndoe@msn.com"}
3: {contact_data: "res@gmail.com"}
4: {contact_data: "info@globe.net"}
5: {contact_data: "testing@yahoo.com"}
我明白了,我昨天回答你的时候并没有清楚地了解你的数据是什么样子的。
现在了解到您的响应数据看起来像这样
{
1: { contact_data: "test@mail.com" },
2: { contact_data: "johndoe@msn.com" },
3: { contact_data: "res@gmail.com" },
4: { contact_data: "info@globe.net" },
5: { contact_data: "testing@yahoo.com" },
}
我可以看出它是对象的对象。为了将其转换为数组。我们将使用 Object.keys()
.
根据给定的数据,这将 return
[ 1, 2, 3, 4, 5]
然后我们将使用 map()
遍历 Object.keys()
的数组以创建 contact_data
.
Object.keys(response.data)
.map((key) => response[key].contact_data)
将它们放在一起,您的 Axios 调用将变为
axios.get('/ticket/users/search',{params: {query: val}})
.then(response => {
this.copyUsersOptions = Object.keys(res.data)
.map((key) =>
response.data[key].contact_data
)
console.info(this.copyUsersOptions);
console.log('here are the users');
console.log(this.copyUsers);
})