2016-12-06 8 views
2

のようなパラメータを持つ関数をトリガーすることは可能ですか?ngOnInitAngular2のngOnInitにパラメータを渡す

(click)イベントだけでなく、ngOnInitでもトリガーしたい機能があります。そのため、最初にページを読み込むと、同じAPIエンドポイントを呼び出すため、基本的に同じ機能がトリガーされます。多分このようなものになるだろうngOnInitにおけるようngOnInit

getOrdersFromOrigin(id: number): void { 
    ... 
} 

でトリガする

機能?その示すエラーが「名 『ID』が見つかりません」

ngOnInit() { 
    this.getOrdersFromOrigin(id); 
    } 

Idが私のngFor、から来ているその私はのparam idがgetOrdersFromOriginである(click)="getOrdersFromOrigin(id)"

+2

'id')は' getOrdersFromOrigin(の範囲の一部である 'それはので、 'ngInInit()'のスコープでは宣言されません。呼び出すIDがわからないかぎり、IDを設定するか、値を代わりに使用する必要があります。 – GillesC

+0

idが関数に附されていない場合、エラーをスローします。あなたは、idが定義されていないか存在していれば、それを処理する必要があります。なぜなら、ngOnInitのidは、ビューからのクリックをトリガーしていない/利用できないユーザーがトリガーしているため、利用できない可能性があるからです。定義されていない場合は、デフォルト値を渡します。 – Manish

+0

いいえIDは 'ngFor'から来て、' item.id'を '(click)'イベントのmy関数に渡すだけなので、どのIDをクリックするのか分かりません。 – MrNew

答えて

1

paramのような経路であれば対応できます。たとえば、あなたはこのようにそれを扱うことができる形成編集し、その後アプリのナビゲートを編集]ボタンをクリックしてテーブル内のいくつかのレコードを編集している場合:

import { ActivatedRoute, Params, Router } from '@angular/router'; 

constructor(
    private route: ActivatedRoute 
) { } 

ngOnInit() { 
    this.route.params.forEach((params: Params) => { 
     let id = +params['id']; // (+) converts string 'id' to a number 
     this.getOrdersFromOrigin(id); 
    }); 
} 

getOrdersFromOrigin(id: number){ 
//some code 
}; 
+0

ありがとう、これは私が必要とするものですが、 'forEach'の外に' getOrdersFromOrigin(id) 'を置く必要があります。それ以外の場合は毎回繰り返します。 – MrNew

0

クリックしたい項目のId()それはngOnInitの範囲で動作しないように、()は、私の提案は、あなたが財産IDを宣言し、@Input()としてそれをマークすることができますということです。あなたはそれを外で使うことができます。コードは以下の通りです。

export class SameComponent implement OnInit { 
    @Input() id:number=0; //initialize 
    getOrdersFromOrigin(id: number): void { 
    ... 
    } 
    ngOnInit() { this.getOrdersFromOrigin(id);} 
} 
+0

しかし、これは常にデフォルト値としてputの 'id = 0'をとりますか? – MrNew

関連する問題