2017-06-20 1 views
1

次の入力プロパティを持つコンポーネントがあります。住所インサイド address: Address;@ Inputから来るとき、ngModelをプロパティに割り当てることは未定義です

は私がstateCodeである、にバインドするプロパティがあります:あり

@Input() addressAssociation: AccountAssociation;

。私のテンプレートで

私はこれを持っている:

<div class="fcol-md-4 fcol-xs-12 form-group" *ngIf="!zipCodeValidating && addressAssociation.address"> 
    <label for="{{name}}State" class="uk-label">State/U.S Territory</label> 
    <select [(ngModel)]="addressAssociation.address.stateCode" 
    [disabled]="isListedZipCode" 
    #addState="ngModel" 
    required> 
    <option [ngValue]="state.abbreviation" *ngFor="let state of states">{{state.fullName}} ({{state.abbreviation}})</option> 
    </select> 
</div> 

<div class="text--error" *ngIf="addState.errors && addState.touched"> 
    <span *ngIf="addState.errors.required">State is required.</span> 
</div> 

問題は、テンプレートの負荷が、それは常にというエラースローした場合:Cannot read property errors of undefinedを。

また、{{addState | json}}で変数を印刷しようとしましたが、循環参照エラーがスローされます。また、単にaddStateを印刷しようとしましたが、無効状態から外に出てその値を変更しても変更されませんでした。

これは明らかに変数#addStateには、これを解決するためのアイデアがngModelで設定されていません。

+0

を使用しなければならない変数が定義される前に、あなたのテンプレートがロード可能性があります。 1つのアプローチは、セーフナビゲーションオペレータ(?)を使用することです。 addressAssociation?.address?.stateCode –

+1

@RobZuber問題はそのコード部分ではなく、 'errors'です。それを修正するには 'addState?.errors'、さらには' addState?.invalid'とエラーをチェックすることです: 'addState?.hasError( 'required')'。 – developer033

+0

私はすでにそれを試みましたが、addStateの値は決して変更されないため、セーブナビゲーション演算子はこれに適合しません。 – Kurtz

答えて

0

私はaddState.errorsは、そのエラー

+0

私はすでに試しましたが、 'addState'の値は決して変更されません。 – Kurtz

1
に生成して、あなたのエラーは、コンポーネント負荷に定義されていない

<div class="text--error" *ngIf="addState.errors && addState.touched"> 
    <span *ngIf="addState.errors.required">State is required.</span> 
</div> 

addStateを追加してみてください、あなたのngIf

*ngIf="addState && addState.errors && addState.touched" 

addStateにこのコードから来ていると信じて

更新の回答:

スコープの問題があります。 *ngIfの中に#addStateを割り当てています。そして、*ngIfの外にaddStateを参照しています。これは機能しません。テンプレート変数は、作成されたスコープ内でのみ使用できます。その中のエラーテスト部門を移動してみてください。*ngIfただ</select>

の下にそれを置く旧答え:

あなたは安全なナビゲーション演算子(https://angular.io/guide/template-syntax#safe-navigation-operator

<div class="text--error" *ngIf="addState?.errors && addState?.touched"> 
    <span *ngIf="addState?.errors.required">State is required.</span> 
</div> 
+0

私はすでにそれを試しましたが、' addState'の値は決して変更されないため、セーブナビゲーション演算子はこれに適合しません。 – Kurtz

+1

ああ、私はちょうどうねった。スコープの問題があります。 '* ngIf'の中に'#addState'を割り当てています。 そして、あなたは '* ngIf'のaddState OUTSIDEを参照しています。 これは機能しません。テンプレート変数は、作成されたスコープ内でのみ使用できます。 '* ngIf'の中でエラーテストdivを動かしてみてください。 「」 – NightCabbage

+0

のすぐ下に置いてあります。私は今見ていませんでした。* ngは問題を引き起こしていました! – Kurtz

関連する問題