2016-11-23 22 views
0

は子供DformComponentはまだ内部のルートコンポーネントからヌルを取得し、以下のコードを参照してください。 DformComponent constructor。私のコードに何か問題はありますか?子コンポーネントに親コンポーネントから渡されたオブジェクトは常にヌル

RootComponent

import { Component } from '@angular/core'; 
import { DformComponent } from './controls/DformComponent'; 

function containsMagicWord(c: any) { 
    if(c.value.indexOf('magic') >= 0) { 
    return { 
     noMagic: true 
    } 
    } 

    // Null means valid, believe it or not 
    return null 
} 

@Component({ 
    selector: 'body', 
    templateUrl: 'RootComponent.html', 
    providers: [DformComponent] 
}) 
export class RootComponent { 
    frmeta:any = { 
     phone:["123456789", containsMagicWord] 
     , ip:["192.168.137.169", containsMagicWord] 
    }; 
    constructor(){ 
    // this.frmeta has been initialized here 
    // this log is before the DformComponent constructor log 
    console.log(this.frmeta); 
    } 
} 

RootComponent.html

<dform [meta]="frmeta"></dform> 

DformComponent.ts

import { Component, Attribute, Input, OnInit } from '@angular/core'; 
import { FormBuilder, Validators } from '@angular/forms'; 

@Component({ 
    selector:'dform', 
    templateUrl:'DformComponent.html' 
}) 
export class DformComponent implements OnInit{ 
    frmdata:any; 
    @Input() meta:any; 
    constructor(fb:FormBuilder, @Attribute('meta') meta:any){ 
    // both meta & this.meta are always undefined & null 
    this.meta = meta; 
    console.log(meta); 
    debugger; 
    this.frmdata = fb.group(this.meta); 
    } 

    ngOnInit(){ 

    } 

    dosubmit(event:any){ 
    console.log(this.frmdata.value); 
    } 
} 

DformComponent.html

<form [formGroup]="frmdata" (submit)="dosubmit($event)"> 
    <inputmask formControlName="phone" mask="(___) ___ - ___"></inputmask> 
    <inputmask formControlName="ip" mask="___.___.___.___" ></inputmask> 
    <button type="submit">Post</button> 
    <pre>{{ frmdata.value|json }}</pre> 
</form> 
+0

コンストラクタで '@ Attribute'を使用している特別な理由はありますか? –

+3

あなたのコードをngOnInitに移動します。 – Cleiton

+0

[Angular2の可能な複製 - 私のコントローラ/コンストラクタからの "入力"にアクセスできません](http://stackoverflow.com/questions/33561845/angular2-cannot-access-inputs-from-my-controller-constructor) –

答えて

1

それはまだ利用できないので、あなたは、コンストラクタでバウンドプロパティにアクセスすることはできません。 ngOnInitライフサイクルフックを使用すると、そこにアクセスできます。

関連する問題