Açısal 1'de, arama işlevlerini, örn. ng-repeat="item in vm.getFilteredItems()"
, getFilteredItems
sonucuyla ilişkili olmayan değişikliklerin, işlevlerin sık sık ve performans açısından sorunlara neden olan sindirimler üzerinde tekrar tekrar ve gereksiz şekilde yeniden oluşturulmasına neden olacağından. Bunun yerine nesnelere bağlıyız ve olaylara göre hesapladık (ör. ng-repeat="item in vm.filteredItems
).Köşeli 2: Bileşen Şablonlarından İşlevlere Bağlama
Açısal 2'de, kirli denetim işlemi en iyi duruma getirilmiştir, ancak işlev, bu özelliklere bağlı olup olmadığına bakılmaksızın, bileşen düzeyinde herhangi bir özellik değiştiğinde, bileşen şablonlarında çağrılan işlevler çağrılacaktır. Bunun yanlış kullanıldığında aynı performans sorunlarına yol açabileceğini umuyorum.
// no function binding
@Component({
selector: 'nofunc',
template: `
<input [(ngModel)]="searchTerm" (ngModelChange)="search($event)" placeholder="searchTerm" />
<div *ngFor="let name of filteredNames">{{name}}</div>
`
})
export class NoFuncComponent implements OnInit {
@Input() names:string[];
searchTerm: string;
ngOnInit() {
this.search(this.searchTerm);
}
search() {
if (!this.searchTerm) {
this.filteredNames = this.names;
return;
}
this.filteredNames = this.names.filter((name) => {
return name.toLowerCase().indexOf(this.searchTerm.toLowerCase()) > -1;
});
}
}
http://plnkr.co/edit/AAFknlJgso3D8F1w3QC1?p=preview
hala Açısal 2'de bir endişe bu mu -
// function binding in template
@Component({
selector: 'func',
template: `
<input [(ngModel)]="searchTerm" placeholder="searchTerm" />
<div *ngFor="let name of filteredNames(searchTerm)">{{name}}</div>
`
})
export class FuncComponent {
@Input() names:string[];
filteredNames(searchTerm) {
if (!searchTerm) return this.names;
let filteredNames = [];
return this.names.filter((name) => {
return name.toLowerCase().indexOf(searchTerm.toLowerCase()) > -1;
});
}
}
:
İşte Açısal 2'de farklı yaklaşımların basitleştirilmiş bir örnektir? Hangi yaklaşım tercih edilir ve neden? Teşekkürler!