Reputation: 2535
i have a set of data with each having separate search box, now if i input in one search box, it is taking to all search boxes. So i need to filter data on particular search box.
HTML:
<div *ngFor="let item of data">
<p>{{item.level_name}}</p>
<input matInput type="text" id="" name="item" value="" placeholder="Search" (input)="searchValue($event)">
<div *ngFor="let item2 of item.values | search:'id,name':query">
<p>{{item2.name}}</p>
</div>
</div>
DEmo: Demo
Upvotes: 1
Views: 113
Reputation: 361
<div *ngFor="let item of data">
<p>{{item.level_name}}</p>
<input matInput type="text" id="" name="item" value="" placeholder="Search" [(ngModel)]="item.query">
<div *ngFor="let item2 of item.values | search:'id,name':item.query">
<p>{{item2.name}}</p>
</div>
You need to update your code here. and following model
{
"level_id": 10,
"query":"",
"values": [...]}
Upvotes: 1
Reputation: 58
The problem appears to be that your [(ngModel)] is set to the same variable, query, for each of the text boxes. Since that same variable is bound for each of the text boxes when you change one, you change them all. you need to create an array of query variables the same size as your data array or append a query variable to each object in your data array so each element can have an individual query.
In your demo you have data that looks like this
data = [
{
"level_id": 7,
"values": [
{
"customer_logo": "R",
"isAssigned": 1,
"id": 40,
"name": "Site-43"
},
{
"customer_logo": "R",
"isAssigned": 1,
"id": 41,
"name": "Site-83"
},
{
"customer_logo": "R",
"isAssigned": 1,
"id": 42,
"name": "Site-84"
}
],
"level_name": "Site"
},
{
"level_id": 8,
"values": [
{
"customer_logo": "R",
"isAssigned": 0,
"id": 43,
"name": "Technology_1"
},
{
"customer_logo": "R",
"isAssigned": 0,
"id": 44,
"name": "Technology_2"
},
{
"customer_logo": "R",
"isAssigned": 0,
"id": 45,
"name": "Technology_3"
}
],
"level_name": "Technology"
},
{
"level_id": 9,
"values": [
{
"customer_logo": "R",
"isAssigned": 1,
"id": 46,
"name": "SemiFinished"
}
],
"level_name": "Valuation Class"
},
{
"level_id": 10,
"values": [
{
"customer_logo": "R",
"isAssigned": 0,
"id": 47,
"name": "MN-1657106"
},
{
"customer_logo": "R",
"isAssigned": 0,
"id": 48,
"name": "MN-1149527"
},
{
"customer_logo": "R",
"isAssigned": 0,
"id": 49,
"name": "MN-1782715"
},
{
"customer_logo": "R",
"isAssigned": 0,
"id": 50,
"name": "MN-622060"
},
{
"customer_logo": "R",
"isAssigned": 0,
"id": 51,
"name": "MN-1111461"
}
],
"level_name": "Product"
},
{
"level_id": 11,
"values": [
{
"customer_logo": "R",
"isAssigned": 0,
"id": 52,
"name": "LINE-130_83"
},
{
"customer_logo": "R",
"isAssigned": 0,
"id": 53,
"name": "LINE-301_83"
},
{
"customer_logo": "R",
"isAssigned": 0,
"id": 54,
"name": "LINE-370_43"
},
{
"customer_logo": "R",
"isAssigned": 0,
"id": 55,
"name": "LINE-245_84"
}
],
"level_name": "Line"
},
{
"level_id": 12,
"values": [
{
"customer_logo": "R",
"isAssigned": 0,
"id": 56,
"name": "Resource-617"
},
{
"customer_logo": "R",
"isAssigned": 0,
"id": 57,
"name": "Resource-369"
},
{
"customer_logo": "R",
"isAssigned": 0,
"id": 58,
"name": "Resource-204"
},
{
"customer_logo": "R",
"isAssigned": 0,
"id": 59,
"name": "Resource-207"
},
{
"customer_logo": "R",
"isAssigned": 0,
"id": 60,
"name": "Resource-370"
},
{
"customer_logo": "R",
"isAssigned": 0,
"id": 61,
"name": "Resource -500"
}
]
}
]
if you add a query to each of those objects like this
data = [
{
"level_id": 7,
"query": '',
"values": [
{
"customer_logo": "R",
"isAssigned": 1,
"id": 40,
"name": "Site-43"
},...
]
and now change your [(ngModel)] form query to item.query and your ngFor underneath that to use item.query instead of query you should be able to get individual query strings.
Upvotes: 0