2017-11-26 4 views
0

私は、各要素がリンク、説明、カテゴリの数が少ないオブジェクトであるリンクの配列を持っています。私はリンクを表示するさまざまなコンポーネントを持っています、そして、私は各コ​​ンポーネントにそのカテゴリーのリンクだけを表示したいと思います。 私はそのカテゴリで配列をフィルタリングしたいと思います。パイプなしのAngular4のオブジェクトのフィルタ配列

私はすべてのリンクを含むモックアップ配列を持っています。

パイプなしでオブジェクトの配列をフィルタリングしようとしました。理由は:https://angular.io/guide/pipes#appendix-no-filterpipe-or-orderbypipe

はどうやら角度チームは、コンポーネントレベルでフィルタリングを行うことを示唆しているとのパイプを使用していない: 「角度チームと多くの経験豊かな角度の開発者を強力にフィルタリングを移動し、部品自体にロジックを並べ替えをお勧めします。 "

this.links = this.appLinksService.getLinks(); 

そして私がする新しいアレイを構築しよう:私はサービスから大きな配列を取得だから、最初

@Component({ 
    selector: 'startups', 
    templateUrl: './startups.component.html' 
}) 

export class StartupsComponent implements OnInit { 

constructor(private appLinksService: DigitalCoinHubService) { } 

title = 'Startups'; 


links: DCHlinks[]; // create a new array in type of DCHlinks to get the data 

startupsLinks: DCHlinks [] = []; // will build the startsups links only 


getLinks(): void { 
    this.links = this.appLinksService.getLinks(); // gets the array with the data from the service 

    for (let i in this.links) 
    { 
    if (this.links[i].dchCategory == 'startups') 
    { 
     this.startupsLinks[i].push(this.links[i]); 
    } 

    } 

} 

ngOnInit() { 
    this.getLinks(); 

} 

}

:だからここ

は私のコンポーネントです関連するリンクのみを含みます。フィルタはカテゴリ別です。しかし、私は、カテゴリを一致させる要素を押して新しい配列を作成しようとするとエラーになります:

プロパティ 'push'は 'DCHlinks'型には存在しません。

DCHlinksはオブジェクトである - これはクラスです:

export class DCHlinks { 
    dchLink: string; 
    dchLinkTitle: string; 
    dchLinkDescription: string; 
    dchCategory: string; 
} 

この単純なフィルタを行うにはどのように任意のアイデア? (そして、パイプを使用しない - なぜ上記の理由を参照してください)

ありがとう!

答えて

1

あなたはstartupsLinks

links: DCHlinks[] = []; 

それとも、単にrelavantデータ

this.startupsLinks = this.links.filter(t=>t.dchCategory == 'startups'); 
+0

こんにちは、感謝を取得するために使用することができますarray.filterのためにしたように、アレイをintializeする必要があります。しかし、私がフィルタリングしないと、初期化せずに正常に動作します。なぜ新しい配列を作成するループを作成するだけで、リンクを初期化する必要があるのでしょうか?それは、もし私がthisを持っていれば、このことを意味するthis.links = this.appLinksService.getLinks(); getLinks()の内部では、それは正常に動作します –

+0

あなたは初期化されていません、あなたはちょうどタイプを宣言しました – Sajeetharan

+0

ちょうどあなたが示唆したようにしました。このエラーが発生する:プロパティ 'push'がタイプ 'DCHlinks'に存在しません。 –

関連する問題