Como posso alterar o código do Angular Material abaixo, para que a tabela de dados seja classificada pela coluna 'nome', em ordem crescente por padrão. A seta (indicando a direção da classificação atual) deve ser exibida.
Isso é o que eu quero alcançar:
Código original:
<table matSort (matSortChange)="sortData($event)">
<tr>
<th mat-sort-header="name">Dessert (100g)</th>
<th mat-sort-header="calories">Calories</th>
<th mat-sort-header="fat">Fat (g)</th>
<th mat-sort-header="carbs">Carbs (g)</th>
<th mat-sort-header="protein">Protein (g)</th>
</tr>
<tr *ngFor="let dessert of sortedData">
<td>{{dessert.name}}</td>
<td>{{dessert.calories}}</td>
<td>{{dessert.fat}}</td>
<td>{{dessert.carbs}}</td>
<td>{{dessert.protein}}</td>
</tr>
</table>
Eu estava tentando algo assim, mas não funciona (nenhuma seta exibida, não classificado)
<table matSort (matSortChange)="sortData($event)" matSortActive="name" matSortStart="asc" matSortDisableClear>
Aqui está o link para o Plunker
angular
angular-material
Jacek Kościesza
fonte
fonte
this.sortData({active: "name", direction: "asc"})
parangOnInit
verificar o plunkerRespostas:
Você está confundindo
matSortStart
paramatSortDirection
.Experimente isto:
https://plnkr.co/edit/sg0hC5d8LTjLKhbH9Eug?p=preview
matSortStart
pode ser usado para reverter o ciclo usado durante a classificação (por exemplo, quando o usuário clica para classificar, começa em desc em vez de asc).fonte
matSortActive
e,matSortDirection
mas a pequena seta não é exibidaVocê pode classificar a tabela programaticamente, invocando o
sort(Sortable)
método da fonte de dados. Supondo que você tenha umadataSource
propriedade de componente para a fonte de dados:fonte
matSortChange
evento. Existe uma maneira de definir a classificação sem acionar o evento?asc
/desc
de uma coluna e se ele for chamado toda vez que a página for carregada, então sempre será diferenteDeveria trabalhar. demo
E para mostrar a seta de direção de classificação, adicione o próximo css (solução alternativa)
fonte
Atualização de material (testado com v7.3):
Isto também irá atualizar a
mat-sort-header
seta do sem qualquer solução alternativafonte
Você também pode vincular propriedades de classificação de esteira a sua variável de componente.
Como @Andrew Seguin diz:
Esta é a maneira correta de definir a classificação padrão, se você souber qual é.
No caso de você conseguir classificar de outro lugar (no meu caso, de parâmetros de string de consulta), você também pode fazer assim (as setas de classificação funcionam perfeitamente aqui):
fonte
Talvez você tenha tentado chamar no init da página a função de classificação forçada no nome e na direção?
fonte
No meu caso, a classificação não estava funcionando porque matColumDef id e mat-cell var são diferentes
depois de fazer alterações matColumnDef = "firstName" para matColumnDef = " name " que é o mesmo que o item. nome
Isso funciona bem para mim
fonte
Eu tive que fazer a classificação padrão no carregamento
fonte
A resposta de @Andrew Seguin (primeira resposta aceita) fez o truque visual para mim, mas não classificou a tabela.
Minha solução é usar o código html fornecido por @Andrew Seguin e chamar o método sortData (sort: Sort) eu mesmo, mas como fazer isso? Conforme especificado na documentação , o ,, Sort '' é uma interface que possui duas propriedades, active e direction e a interface deve ser semelhante a esta:
Portanto, o truque é chamar o método sortData (sort: Sort) em ngOnInit da seguinte maneira:
O código HTML é como na resposta aceita ;-) Espero que isso ajude alguém, Alex
Exemplos de documentação
fonte
Existem vários fatores contribuintes que afetam o comportamento. Principalmente é o uso de MatTableDataSource em vez de um derivado feito à mão de DataSource . Portanto, soluções diferentes podem funcionar em alguns casos e não em outros.
De qualquer forma, é um bug antigo que foi bem coberto no GitHub . Vote a favor desse problema do GitHub para atrair a atenção da equipe Angular.
A solução mais durável publicada nesse thread do GitHub ( link ) é chamar o seguinte método ao aplicar uma ordem de classificação:
fonte