Valor observable claro al llamar a la función
Tengo un menú desplegable que obtiene valores de un servicio.
Menú desplegable
<mat-select *ngif="selectedCloudTypeName === 'AWS'" class="select--width--130" [formcontrol]="awsOwnersControl" placeholder="AWS Owners" msinfinitescroll="" (infinitescroll)="loadMoreAwsOwners()" [complete]="currentAwsOwnerssDropdownOffset >= awsOwnersTotalCount">
<mat-option *ngfor="let owner of awsOwners$ | async" [value]="owner.id">
{{ owner.name }}
</mat-option>
</mat-select>
Llamada al servicio en el archivo TS
getAwsOwners(offset = 0) {
this.isLoading$.next(true);
this.awsService
.getOwnersListForAws(this.selectedCredentialIdForCloudType, this.selectedPlatform, { offset, limit: 100 })
.subscribe(
(owners: PaginatedResult<commonenumvalue[]>) => {
this.awsOwners.next(owners.data);
this.awsOwnersTotalCount = owners.totalCount;
this.isLoading$.next(false);
},
(error) => {
this.isLoading$.next(false);
this.alertify.error(error);
},
);
}
En el método OnInit, utilizo un Observable
this.awsOwners$ = this.awsOwners.asObservable().pipe(scan((acc, curr) => [...acc, ...curr], []));
que declaro como propiedad en el archivo
awsOwners = new BehaviorSubject<commonenumvalue[]>([]);
awsOwners$: Observable<commonenumvalue[]>;
El problema es que cuando llamo a la función getAwsOwners
con un valor diferente de selectedPlatform
, los datos antiguos persisten y se añaden los nuevos datos.
He intentado borrar el subject awsOwners
de esta manera
this.awsOwners.next([]);
antes de llamarlo, pero no lo borra y los nuevos datos se añaden a los antiguos.
¿Hay alguna forma de limpiarlo?
Siento que en el operador scan
debo limpiar el .acc
de alguna manera porque acumula los valores.</commonenumvalue[]></commonenumvalue[]></commonenumvalue[]>
davy.ai
Para vaciar el sujeto
awsOwners
, puede llamar al métodocomplete()
en él, que emitirá una notificación completa y lo obligará a cancelar el registro de todos los observadores. Luego puede crear una nueva instancia deBehaviorSubject
para reemplazar la antigua.Aquí hay un ejemplo de cómo modificar el método
getAwsOwners()
para vaciar el sujetoawsOwners
antes de cada nueva llamada:Esto asegurará que cada llamada a
getAwsOwners()
comience con unawsOwners
vacío.</commonenumvalue[]></commonenumvalue[]>