htmlangulartypescriptprimengprimeng-datatable

Filter PrimeNG Table on Init using .ts code


I need to filter the table on view load.

For example, I have a table with 5 columns (Woid, Customer, AdapterID, Assignee, Status). On load, I want to filter woid column using 'contains'. I accomplished filtering onLoad but when I want to filter again that column later I got an error:

[i]'Cannot find a differ supporting object '[object Object]' of type 'object'. NgFor only supports binding to Iterables such as Arrays.'[/i]

Program code below...

@ViewChild('dt', { static: true }) dt: any;
ngOnInit() {
    this.dt.filter('22', 'woid', 'contains');
}

enter image description here

Also, after filtering via .ts code (woid filter) and directly in view with <p-columnFilter> (customer filter) from PrimeNG Angular collection, I get this JSON. woid property is not an array, unlike custom which is. onFiltering method and JSON below.

onFiltering(event: any) {
    console.log('Filtered value: '+ JSON.stringify(event.filters));
}


{
    "woid": {
        "value": "22",
        "matchMode": "contains"
    },
    "customer": [{
        "value": "2",
        "matchMode": "contains",
        "operator": "and"
    }]
}

Solution

  • I replaced this line of code (in ngAfterContentInit):

    this.dt.filter('22', 'woid', 'contains'); 
    

    with this:

    this.dt.filters['woid'] = [{value: "22", matchMode: "contains", operator: "and"}];
    

    Now it works fine :)

    PS. It doesn't work if you're using stateKey & stateStorage