2017-02-17 2 views
0

ルータのパラメータ(id)をngFormに渡してからイベントエミッタに渡すのが少し難しいです。ここで私はIDを取得する方法です - 最初のconsole.logが正常に動作するのを見ると、ルータからIDを取得できます。今、私は私のsingleOpenHomeオブジェクトにこれを割り当てる(ただし、未定義のエラーを取得する)しようとしています:Angular2 - ngFormに変数としてルータパラメータを渡します

@Input() singleOpenHome: OpenHomeModel; 

ngOnInit() { 
     // Get the slug on it from the router 
     this.route.params.forEach((params: Params) => { 
      let id = params['propertyID']; 
      console.log('id on the child is:'+id); 
      //this.singleOpenHome.propertyID == id; Cannot read property 'propertyID' of undefined 
     }); 
    } 

は、今私は、フォームにこれを渡したいと思っています:

<form class="my2" #form="ngForm" (ngSubmit)="handleSubmit(form.value, form.valid)" novalidate></form> 

ここに私のイベントemmitterは次のとおりです。

@Output() 
    update: EventEmitter<OpenHomeModel> = new EventEmitter<OpenHomeModel>(); 

    constructor(private route: ActivatedRoute) {} 

    handleSubmit(sinlgeOpenHome: OpenHomeModel, isValid: boolean) { 
     if (isValid) { 
      this.update.emit(sinlgeOpenHome); 
     } 
    } 

すべてのヘルプは、私が変換に特に関連する問題を経験した

+0

あなたが示したコードはすべて同じコンポーネントに属していますか?はいの場合は、ルートプロパティをクラスプロパティ(this.id = params ['propertyID']; ')に割り当てるだけで、コンポーネントまたはそのテンプレートのどこからでもプロパティにアクセスできます。 – AngularChef

+0

試してみました:this.singleOpenHome.propertyID = params ['propertyID'];しかし、私は{{singleOpenHome.propertyID}}のようなテンプレートの値を表示することはできません。 – rhysclay

+0

私は分かりません。私が提案したコードを試してみませんか?表示されたコードはすべて同じコンポーネントに属していますか? – AngularChef

答えて

1

を高く評価しましたroute.paramsObservablePromiseに換算すると、forEachとなります。単にsubscribe

ngOnInit() { 
    // Get the slug on it from the router 
    this.route.params.subscribe(params => { 
    const id = params['propertyID']; 
    console.log(`id on the child is: ${id}`); 
    }); 
} 

これは誤植

this.singleOpenHome.propertyID == id; 

あなたが代わりに割り当ての比較を行っているように見えるラインを使用することを検討してください。

あなたには、プロパティが定義されていない他のバグがある可能性があります。それは入力としてマークされているので、それは外部のバインディングから来ると仮定します。このバインディングに渡す値が適切に初期化されていることを確認してください。

+0

あなたはそうです - 正しく私のバインディングを行っていない、私はsingleOpenHomeオブジェクトを初期化し、それを子コンポーネントに渡す必要がある親コンテナを持って、私はpropertyID変数を割り当てることができます(しかし、私はそれを親からのバインディングで渡します) – rhysclay

関連する問題