{{ t.pages.multiSelect.cardTitle }}
A demo de multiseleção mostra seleção múltipla com dataSource estável, projeção manual e documentação organizada entre visão geral e API.
Descrição
O componente mantém uma coleção de valores selecionados e projeta o resultado diretamente no trigger.
Recursos
- Seleção múltipla com badges e placeholder.
- Integração com
dataSourceouli-multi-option. - Binding direto com listas no
ngModel.
Limitações
- Evite recriar listas de opções em getters reativos.
- O overlay precisa de atualização consistente ao mudar a seleção.
- Para coleções muito grandes, mantenha paginação ou busca no pai.
{{ t.pages.multiSelect.channels }}: {{ selectedChannelsLabel }}
{{ t.pages.multiSelect.projectedLabel }}: {{ projectedChannelsLabel }}
Como utilizar
li-multi-select segue a mesma estratégia do
li-select, mas mantém múltiplos valores
selecionados e renderiza badges no trigger.
O padrão recomendado para o demo e para produção é manter
dataSource estável e atualizar apenas a coleção de
valores selecionados.
[dataSource]: lista de opções externas.labelKey: chave usada para o texto visível.valueKey: chave usada no array do ngModel.[(ngModel)]: lista de valores selecionados.[placeholder]: texto quando nada está marcado.
<li-multi-select
[dataSource]="channelOptions"
labelKey="label"
valueKey="id"
[(ngModel)]="selectedChannels">
</li-multi-select>
Observações e limites
- Não recrie a lista de opções em getters reativos.
- Agende
overlay.update()em frame futuro ao mudar a seleção. - Calcule
maxHeightpelo viewport, não pela altura atual do painel.
// Bom: opções criadas uma única vez
late final List<Map<String, dynamic>> channelOptions;
// O ngModel muda, mas o dataSource continua estável
List<dynamic> selectedChannels = <dynamic>['email', 'push'];