Javascript VueJs中的过滤器
我正在尝试在Vuejs 2.0中构建一个小应用程序,在这里我使用组件,我有一个类似以下内容的数据格式:Javascript VueJs中的过滤器,javascript,vue.js,vuejs2,Javascript,Vue.js,Vuejs2,我正在尝试在Vuejs 2.0中构建一个小应用程序,在这里我使用组件,我有一个类似以下内容的数据格式: { "model": [ { "id":1, "salutation":"Mr", "first_name":"Rahul", "last_name":"Bashisht", "numbe
{
"model":
[
{
"id":1,
"salutation":"Mr",
"first_name":"Rahul",
"last_name":"Bashisht",
"number":"9876521102",
"email":"rahul@icicibank.com",
"company":
{
"id":1,
"name":"ICICI Bank",
"is_client":1,
}
},
{
"id":2,
"salutation":"Mr",
"first_name":"Vikash",
"last_name":"Pandey",
"number":"0987654345",
"email":"vikash@hdfc.com",
"company":
{
"id":2,
"name":"HDFC Bank",
"is_client":0,
}
}
]
}
contactClients: function() {
if(this.model)
{
return this.model
.filter(f => (f.company.is_client == 1))
.map(d => ({label: d.first_name+' '+d.last_name+' - '+d.company.name, value: d.id}))
}
},
clients: function () {
if(this.companies)
{
return this.companies
.filter(f => f.is_client == 1)
.map(d => ({label: d.name, value: d.id}))
}
}
现在我将其设置为变量model
,然后尝试在computed property
中使用client=1
进行过滤,如下所示:
{
"model":
[
{
"id":1,
"salutation":"Mr",
"first_name":"Rahul",
"last_name":"Bashisht",
"number":"9876521102",
"email":"rahul@icicibank.com",
"company":
{
"id":1,
"name":"ICICI Bank",
"is_client":1,
}
},
{
"id":2,
"salutation":"Mr",
"first_name":"Vikash",
"last_name":"Pandey",
"number":"0987654345",
"email":"vikash@hdfc.com",
"company":
{
"id":2,
"name":"HDFC Bank",
"is_client":0,
}
}
]
}
contactClients: function() {
if(this.model)
{
return this.model
.filter(f => (f.company.is_client == 1))
.map(d => ({label: d.first_name+' '+d.last_name+' - '+d.company.name, value: d.id}))
}
},
clients: function () {
if(this.companies)
{
return this.companies
.filter(f => f.is_client == 1)
.map(d => ({label: d.name, value: d.id}))
}
}
然后我将其放置在v-select选项中,如下所示:
<v-select multiple :options="contactClients" v-model="clientParticipants"></v-select>
我将它放在公司变量中,并对其进行如下过滤:
{
"model":
[
{
"id":1,
"salutation":"Mr",
"first_name":"Rahul",
"last_name":"Bashisht",
"number":"9876521102",
"email":"rahul@icicibank.com",
"company":
{
"id":1,
"name":"ICICI Bank",
"is_client":1,
}
},
{
"id":2,
"salutation":"Mr",
"first_name":"Vikash",
"last_name":"Pandey",
"number":"0987654345",
"email":"vikash@hdfc.com",
"company":
{
"id":2,
"name":"HDFC Bank",
"is_client":0,
}
}
]
}
contactClients: function() {
if(this.model)
{
return this.model
.filter(f => (f.company.is_client == 1))
.map(d => ({label: d.first_name+' '+d.last_name+' - '+d.company.name, value: d.id}))
}
},
clients: function () {
if(this.companies)
{
return this.companies
.filter(f => f.is_client == 1)
.map(d => ({label: d.name, value: d.id}))
}
}
在v-select中,我有:
<v-select :options="clients" v-model="summary.client"></v-select>
我希望根据选择的联系人客户
,有一个额外的过滤器,即如果在第一个列表中选择了任何联系人客户
,则第二个列表应仅将这些公司
作为选项,如果在第一个列表中没有选择(ContactClient)然后,第二个列表应该有所有默认选项,使用当前情况下的simpleis\u client
filter。由于contactClients
中的选择是多个的,所以我不知道如何过滤元素。请引导我
编辑:您可以使用computed属性在那里实现筛选逻辑,并将其绑定到第二个列表。
参考资料:这可能会对您有所帮助
contactClients: function() {
if (this.model) {
return this.model.filter(f => f.company.is_client == 1).map(d => ({
label: d.first_name + " " + d.last_name + " - " + d.company.name,
value: d.id,
companyId: d.company.id
}));
}
},
clients: function() {
var self = this;
var res = [];
if (this.companies) {
if (this.clientParticipants.length) {
console.log(this.clientParticipants)
this.clientParticipants.forEach(function(cc) {
self.companies.forEach(function(c) {
if (cc.companyId === c.id) {
res.push(c);
}
});
});
return res.map(d => ({ label: d.name, value: d.id }));
} else {
return this.companies
.filter(f => f.is_client == 1)
.map(d => ({ label: d.name, value: d.id }));
}
}
}
示例你能提供JSFIDLE或其他什么吗?@Pradeepb请看一看:我已经在我的computed属性中创建了这些列表,选择列表是一个数组(多个),我不确定如何使用过滤器多次比较id(cc.value==c.id)
,但联系人id和公司id都不同,它们是不一样的。那么它们之间有什么关系呢?它们之间应该有一些共同的因素可以比较,对吗?一旦你从模型
中提取联系人,它也会在公司
键下附带公司数据,在这里你可以看到每个联系人在公司键
下都有公司名称和ID。不。由于您正在ContactClient
计算值中修改它,因此它将只有标签
和值
。检查。我已经修改过了。是的,我理解。但核心数据集具有这些价值。我想我们可以从接触模型数据集中找到并映射值。