если я правильно понял ваш вопрос, вы не запрашиваете возможность сортировать несколько столбцов одновременно, а просто сортировка не работает.
В вашем коде проблема заключается в том, что вы указываете в заголовке таблицы следующее поле столбцов для сортировки:
[pSortableColumn]="col.field"
и эти поля определены как:
this.cols = [
{ field: 'name', header: 'Name' },
{ field: 'year', header: 'Year' },
{ field: 'age', header: 'Age' },
{ field: 'color', header: 'Color' }
];
НО ваши данные поступают с разными именами:
this.documents=[{
"sName":"Jhon",
"sYear":"1994",
"sAge":"20",
"sColor":"Red"
},
[...]
"name"! = "SName", поэтому ваша таблица не способна сортировать данные.
На самом деле, я удивлен, что вы говорите, что столбец «имя» можно сортировать.
Просто измените определение, и код будет работать.
В любом случае, чтобы разрешить также сортировку по нескольким столбцам, я предлагаю изменить код следующим образом:
<p-table [columns]="cols" [value]="documents" sortMode="multiple">
<ng-template pTemplate="header" let-columns>
<tr>
<th *ngFor="let col of columns" [pSortableColumn]="col.field">
{{col.header}}
<p-sortIcon [field]="col.field"></p-sortIcon>
</th>
</tr>
</ng-template>
<ng-template pTemplate="body" let-doc let-columns="columns">
<tr>
<td *ngFor="let col of columns">
{{doc[col.field]}}
</td>
</tr>
</ng-template>
</p-table>
Он также более легкий, и никаких изменений в файле ts не требуется, даже если вы берете данные из веб-службы, поскольку с точки зрения файла html вы всегда передаете объект «документы».