Eu preencho uma grade com a seguinte linha de código:
this.gridData$ = this.userService.getUsers();
e este é o HTML correspondente:
[kendoGridBinding]="(gridData$ | async)!"
Funciona como esperado.
Também tenho um botão de exclusão. Clicar nele exclui o usuário. Depois disso, quero remover o usuário da lista, mas sem fazer uma solicitação HTTP extra. Tentei shareReplay
, mas a solicitação extra está lá:
this.gridData$ = this.gridData$.pipe(
shareReplay({ bufferSize: 1, refCount: true }),
map((users) => {
return users.filter(
(user) => user.userId !== this.currentDataItem.userId
);
})
);
Como filtrar os dados da grade para excluir o usuário excluído sem nenhuma solicitação HTTP adicional? Ou devo armazenar os usuários em uma variável local no init e modificar o array ao adicionar, editar ou excluir e convertê-lo em um observável?
Basta adicionar uma
deletedUsers
propriedade que seja umBehaviorSubject
, que armazena os usuários excluídos.Usamos
combineLatest
para filtrar os dados, sem precisar buscá-los novamente pela API. As alterações nodeletedUsers
behaviorSubject acionarão um recálculo.Ao excluir um usuário, envie o ID para
deletedUsers
behaviorSubject.OBSERVAÇÃO: Geralmente, é uma boa ideia atualizar a lista após as operações CRUD, para que seus usuários finais não trabalhem com dados obsoletos.
Com base na resposta de Naren Murali, talvez seja melhor dar ao serviço a propriedade total sobre os dados do usuário. No momento, parece que o serviço apenas obtém os dados, que depois pertencem ao componente. Alterar seu serviço para algo como o seguinte pode ajudar:
Seu componente poderia então usar
this.userService.user$
ethis.userService.deleteUser()
interagir com os dados do usuário, permitindo que o serviço se responsabilize pelos usuários. Você também pode adicionar métodos adicionais ao serviço para oferecer suporte a recursos como adição, filtragem e paginação. Essa abordagem é boa porque mantém os detalhes de como/quando os usuários são recuperados do componente. Se você precisar alterar a lógica posteriormente, o componente não se importa se o serviço atualiza a partir do servidor, faz uma exclusão na memória ou encontra algum outro método. Esses detalhes são problema do serviço, não do componente.e em HTML: