I've got a list of invoices in ng-table and would like to be able to filter on a nested attribute. The json looks like this;
[
{
id: 1,
date: "20/03/2014",
no: "1",
client: {
fullname: "ABC Catering"
}
}
]
My view look like this
<table ng-table="tableParams" show-filter="true" class="table">
<tr class='listing' ng-repeat="invoice in $data">
<td data-title="'Invoice No.'" sortable="'no'" filter="{'no':'text'}">
{{invoice.no}}
</td>
<td data-title="'Date'" sortable="'date'" filter="{'date':'text'}">
{{invoice.date}}
</td>
<td data-title="'Client'" sortable="'client.fullname'" filter="{'client.fullname':'text'}">
{{invoice.client.fullname}}
</td>
<td>
<a href="/api#/invoices/{{invoice.id}}">Show</a>
<a href="/api#/invoices/{{invoice.id}}/edit">Edit</a>
<a href="" ng-confirm-click="destroy(invoice.id)">Delete</a>
</td>
</tr>
</table>
I would like to get the filtering working for client.fullname. How do I filter on nested attributes?
Update
I've found a work around where I just put the nested field into a non-nested JSON element, in the above example I create a JSON['client_name'] element and assign it to client.fullname within the rails model. Then the filter works as it's not nested.
Still looking for a way in which I could do without this work around.
You can create your own filter (ngTable v0.7.1):
...
As the previous accepted answer doesn't work anymore on nested params, here is my contribution for nested filtering / sortable / ordering getData()
You can use
$filter
on anything you want to filter on from the JSON response.HERE is a contrived example of how filtering can be done on nested JSON element. Sample code is taken from one of the example of ng-table's usage with filters.
Main part to note in the app is
Plunker works as expected (if I got your requirement correct). Give a shout if that something that is not what you are aiming at. :)
Just stumbled upon this problem and wasn't really satisfied with any of the solutions so here's my try ... It's just about overriding the filters before we get to the actual filtering.
We could probably think about some generic method extending filter object if there's a dot in the filter attribute (and do a PR ?). Would be a lot cleaner.