Только когда вы можете использовать ECMAScript 6 или транспилеры .
Особенности:
Код:
function clone(target, source){
for(let key in source){
// Use getOwnPropertyDescriptor instead of source[key] to prevent from trigering setter/getter.
let descriptor = Object.getOwnPropertyDescriptor(source, key);
if(descriptor.value instanceof String){
target[key] = new String(descriptor.value);
}
else if(descriptor.value instanceof Array){
target[key] = clone([], descriptor.value);
}
else if(descriptor.value instanceof Object){
let prototype = Reflect.getPrototypeOf(descriptor.value);
let cloneObject = clone({}, descriptor.value);
Reflect.setPrototypeOf(cloneObject, prototype);
target[key] = cloneObject;
}
else {
Object.defineProperty(target, key, descriptor);
}
}
let prototype = Reflect.getPrototypeOf(source);
Reflect.setPrototypeOf(target, prototype);
return target;
}
Можете ли вы изменить логику разбивки на страницы?
Если да, вы можете поместить номер страницы в маршрут и использовать маршрут для разбивки данных на страницы, при этом вам не нужно прослушивать событие браузера слушателя. [ 115]
Пример (маршрутизация):
{ path: 'list/:page', component: ExampleComponent },
ExampleComponent
constructor(private route:ActivatedRoute){}
ngOnInit(){
this.route.params.subscribe( params => {
this.currentPage = params['page'];
this.updatePaginator();
this.updateStorePaginator();
});
}
Btn для изменения страницы:
<a routerLink="/list/5">Page 5</a>
Для обновления пути с изменением из paginator вы можете сделать это
<mat-paginator (page)="change($event)">
</mat-paginator>
change(e.page){
this.router.parent.navigate(e.page);
}