I am developing a simple search screen to learn angular subscription which i find to be very confusing. In my home page page I created two components. One filter components and second search result component.
Here is my filter service
export class FilterService {
private filtersubject = new Subject<Filter>();
public currentfilters: Observable<Filter>;
constructor() {
this.filtersubject = new BehaviorSubject<Filter>(Filter.getInstance());
this.currentfilters = this.filtersubject.asObservable();
}
getFilters(): Observable<Filter> {
return this.filtersubject.asObservable();
}
sendFilterMessage() {
this.filtersubject.next(Filter.getInstance());
}
clearFilterMesasage() {
this.filtersubject.next(new Filter());
}
}
Here is my search result service
export class SearchresultsService {
public searchresult!: Observable<ResultData[]>;
private searchresultsubject = new Subject<ResultData[]>();
private f: Filter = Filter.getInstance();
subscription: Subscription;
constructor( private httpClient: HttpClient, private filterservice: FilterService ) {
this.subscription = this.filterservice.currentfilters.subscribe(
(filter: Filter) => {
this.f = filter;
this.searchData();
this.searchresult = this.searchresultsubject.asObservable();
});
}
public searchData(): void {
const url = `${environment.ssoUrl}api/SearchrResult`;
this.httpClient.get<ResultData[]>(url, { params, responseType : 'json'}).
subscribe((response: ResultData[]) => {
this.searchresultsubject.next(response);
});
}
}
in search result i have a link for each record that navigates to details page. There you do some CRUD operation and on Submit navigate back to home page. The problem is that after CRUD operation and navigation back to search screen the subscription never got cleared and retains the previous search options. In search components i have
resetFilterData(formid: number){
this.filterservice.clearFilterMesasage();
this.router.navigate(["details", id]);
}
Also in homecomponents.ts I have
export class HomeComponent implements OnInit, OnDestroy {
subscription: any;
constructor(
private router: Router,
public filterSer: FilterService ) {
this.subscription = this.filterSer.currentfilters.subscribe();
}
ngOnDestroy(): void {
this.subscription.unsubscribe();
}
ngOnInit() {
//some code
}
}
Am I missing something in the code or not doing it right. why did the subscription not reset after navigation. Please advice THanks