[解決済み] Angular 2のTypeScriptで配列にフィルタをかけるには?
2022-02-08 18:21:21
質問
ng-2の親子データ継承に苦労しています。
実用的な解決策になりそうなのは、データの配列をフィルタリングして、1つの親IDから参照される子データのみからなる配列にすることです。 言い換えれば、データ継承は、1つの親IDによるデータフィルタリングになるのです。
具体的な例としては、books 配列をフィルタリングして、ある特定の
store_id
.
import {Component, Input} from 'angular2/core';
export class Store {
id: number;
name: string;
}
export class Book {
id: number;
shop_id: number;
title: string;
}
@Component({
selector: 'book',
template:`
<p>These books should have a label of the shop: {{shop.id}}:</p>
<p *ngFor="#book of booksByShopID">{{book.title}}</p>
`
])
export class BookComponent {
@Input()
store: Store;
public books = BOOKS;
// "Error: books is not defined"
// ( also doesn't work when books.filter is called like: this.books.filter
// "Error: Cannot read property 'filter' of undefined" )
var booksByStoreID = books.filter(book => book.store_id === this.store.id)
}
var BOOKS: Book[] = [
{ 'id': 1, 'store_id': 1, 'name': 'Dichtertje' },
{ 'id': 2, 'store_id': 1, 'name': 'De uitvreter' },
{ 'id': 3, 'store_id': 2, 'name': 'Titaantjes' }
];
TypeScriptは私にとって新しいものですが、ここではもう少しでうまくいきそうです。
(元の書籍の配列を上書きすることも可能で、その場合は
*ngFor="#book of books"
.)
EDIT 近づいてはいるが、まだエラーが出ている。
//changes on top:
import {Component, Input, OnInit} from 'angular2/core';
// ..omitted
//changed component:
export class BookComponent implements OnInit {
@Input()
store: Store;
public books = BOOKS;
// adding the data in a constructor needed for ngInit
// "EXCEPTION: No provider for Array!"
constructor(
booksByStoreID: Book[];
) {}
ngOnInit() {
this.booksByStoreID = this.books.filter(
book => book.store_id === this.store.id);
}
}
// ..omitted
解決方法は?
あなたのコードを
ngOnInit
を使用し
this
キーワードを使用します。
ngOnInit() {
this.booksByStoreID = this.books.filter(
book => book.store_id === this.store.id);
}
必要なのは
ngOnInit
というのは、入力の
store
はコンストラクタにセットされません。
ngOnInit は、ディレクティブのデータバインドプロパティが初めてチェックされた直後で、 子プロパティがチェックされる前に呼び出されます。これは、ディレクティブがインスタンス化されたときに一度だけ呼び出されます。
( https://angular.io/docs/ts/latest/api/core/index/OnInit-interface.html )
あなたのコードでは、booksのフィルタリングはクラスのコンテンツに直接定義されています...
関連
-
[解決済み] Verilogで1次元と2次元のバイト配列を宣言して使用するには?
-
[解決済み] Ruby: ハッシュの配列で Enumerator を取得しようとすると nil:NilClass の未定義メソッド `[]' が発生する。
-
[解決済み] 配列から特定の項目を削除するにはどうすればよいですか?
-
[解決済み] JavaScript で配列に値が含まれているかどうかを確認するにはどうすればよいですか?
-
[解決済み] 配列からArrayListを作成する
-
[解決済み] 配列に特定のインデックスで項目を挿入する方法 (JavaScript)
-
[解決済み] オブジェクトが配列であるかどうかを確認するにはどうすればよいですか?[重複]。
-
[解決済み] JavaScriptで配列を空にするにはどうしたらいいですか?
-
[解決済み】オブジェクトの配列を文字列のプロパティ値でソートする
-
[解決済み】配列に何かを追加する方法は?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】アセンブリ言語での配列のバブルソート
-
[解決済み] Verilogで1次元と2次元のバイト配列を宣言して使用するには?
-
[解決済み] Swift Closuresの$0と$1の意味は何ですか?
-
[解決済み] MATLABで動的配列を作成する方法
-
[解決済み] Rで3D行列をセットアップし、特定の要素にアクセスする
-
[解決済み] int (*p)[10]=s と int (*o)[5]=&s の違いは何ですか?
-
[解決済み] glVertex3fvとglVertex3fの相違点
-
[解決済み] MATLABのnumel関数とlength関数の違いについて
-
[解決済み] MATLABでn次元の行列の各要素を反復処理するにはどうすればよいですか?
-
[解決済み] SwiftでUInt8バイト配列を文字列に変換する方法