У меня проблема с Angular 6, когда я захожу на страницу списка хотя бы дважды.
На этой странице списка я добавляю информацию в таблицу
<table id="table-products" class="wb-tables table table-striped table-hover" data-wb-tables='{ "ordering" : false }'>
<thead>
<tr>
<th>Id</th>
<th>Title</th>
</tr>
</thead>
<tbody>
<tr *ngFor="let product of products">
<td>{{product.id}}</td>
<td><a routerLink="{{product.routerLink}}">{{product.title}}</a></td>
</tr>
</tbody>
И информация загружается в бэкэнд следующим образом:
ngOnInit() {
this.productService.getAll().subscribe( (products: IProduct[]) => {
this.products = products;
this.products.map(p => p.routerLink = ['../' + p.id]);
});
}
Я также должен вызывать некоторый javascript, когда запускается представление компонента
ngAfterViewInit() {
if (wb.isReady) {
setTimeout(() => {
$('.wb-tables:not(.wb-tables-inited)').trigger('wb-init.wb-tables');
}, 0);
}
}
Это хорошо работает напервая загрузка независимо от того, введу ли я URL в браузере или перейду из другого компонента.Но когда я возвращаюсь к нему во второй раз из обычной навигации по маршрутизатору, у меня возникает проблема, связанная с тем, что javascript не инициализирует таблицу данных должным образом.
Кажется, что он кэширует компонент?Хотя конструктор и ngOnInit вызываются на все вызовы ...
Я пытался добавить собственную стратегию повторного использования, но она не работает ...
export class ProductsRouteReuseStrategyService implements RouteReuseStrategy {
shouldDetach(route: ActivatedRouteSnapshot): boolean { return false; }
store(route: ActivatedRouteSnapshot, detachedTree: DetachedRouteHandle): void {}
shouldAttach(route: ActivatedRouteSnapshot): boolean { return false; }
retrieve(route: ActivatedRouteSnapshot): DetachedRouteHandle|null { return null; }
shouldReuseRoute(future: ActivatedRouteSnapshot, curr: ActivatedRouteSnapshot): boolean {
return false;
}
}
есть идеи?