パイプのドキュメントを検索しても説明が見つからない奇妙なパイプの問題があります。
基本的に、オブジェクトの配列をソートするパイプがあります。問題は、同じソースからさらに多くのリストが繰り返されている場合、それらのリストも変更されてしまうことです。パイプが元のソースを変更しているようで、それに基づいてすべてが変更されます。
これから繰り返すと:
public options: any[] = [
{label: 'Item 1'},
{label: 'Item 3'},
{label: 'Item 6'},
{label: 'Item 2'}
];
次に、クエリで除外できるリストを用意します。
<div>
<form-input [(model)]="query" placeholder="Write a search query"></form-input>
<ul>
<li *ngFor="#option of options | filterObjects:query">
{{option.label}}
</li>
</ul>
</div>
そして、ソートするパイプを使用する別のものがあります。
<!-- This list's pipe will also affect the list above since they repeat from the same list -->
<div>
<ul>
<li *ngFor="#option of options | orderByProperty:'label'">
{{option.label}}
</li>
</ul>
</div>
ソートするパイプ:
import {Pipe} from 'angular2/core';
@Pipe({
name: 'orderByProperty'
})
export class OrderByPropertyPipe {
transform(value, args) {
if (!args[0]) {
return value;
}
else if (value) {
return value.sort(function(a,b) {
return (a[args[0]] > b[args[0]]) ? 1 : ((b[args[0]] > a[args[0]]) ? -1 : 0);
});
}
}
}
両方のリストが表示されます。
- アイテム1
- 項目 2
- アイテム3
- 項目6
このかなり奇妙な動作を回避するにはどうすればよいですか?