2017-09-06 9 views
1

私は角型cliプロジェクトを開発し、検証するために多くのフォームを取得しました。 app-rootが表示されたら、フォーム検証メッセージを追加する必要があります。 私の現在の実装は以下の通りです。角2は本文にhtmlを追加します

<app-root class="" _nghost-c0="" ng-version="4.3.4"> 
    <!-- other html content goes here...... --> 
     <form [formGroup]="form"> 
      <label for="name">Name: </label> 
      <input type="text" [formControl]="nameCtrl"/> 
       <div *ngIf="!nameCtrl.valid && nameCtrl.hasError('required')" 
        class="error"><validation-msg>Name is required.</validation-msg></div> 
       <div *ngIf="!nameCtrl.valid && nameCtrl.hasError('badName')" 
        class="error"><validation-msg>Name must start with <tt>pee</tt>.</validation-msg></div> 
     </form> 
    <!-- other html content goes here...... --> 
    </app-root> 

表示すると、次のようなエラーメッセージが表示されます。 validation-msgは、単純なテンプレートを持つコンポーネントです。そのコンテンツはapp-rootの外側に追加する必要があります。

<app-root class="" _nghost-c0="" ng-version="4.3.4"> 
     <!-- other html content goes here...... --> 
    </app-root> 
    <validation-msg-content> 
     <div>Name is required.</div> 
    </validation-msg-content> 
+0

Iドン:今、あなたのようにgetErrorメソッドを定義することができ

import { Component, Input, Output, EventEmitter } from '@angular/core'; @Component({ selector: 'myform', templateUrl: './myform.component.html', styleUrls: ['./myform.component.css'] }) export class MyFormComponent { @Output() sendData:any = new EventEmitter(); validateForm(){ this.sendData.emit({error}); } } 

と親コンポーネントのHTML

<myform (sendData)="getError($event)"></myform> 

Angularのことはよく知っていますが、それを達成するためには一時的な回避策が必要なようです。 _if_の内部にスクリプトタグを挿入していますか? –

+0

基本的に、あるコンポーネントから別のコンポーネントにデータを渡す必要があります。あなたはそれについてもっと読むことができますhttps://angular.io/guide/component-interaction – KIA

+0

更新された質問を確認してください。コンポーネント間でデータを共有することではありません。 app-root要素のpout側にコンポーネントテンプレートを追加することです。 –

答えて

0

これが主なコンポーネントである場合、これを行うことはできません。しかし、このフォーム自体がコンポーネントの場合、フォームコンポーネントを含む親コンポーネントにエラーメッセージを送信することができます。

@Outputをフォームコンポーネントで使用し、エラーメッセージを親コンポーネントに送信できるイベントエミッタを使用する必要があります。親コンポーネントがイベントを受信すると、エラーメッセージが表示されます。

だから、フォームコンポーネントのコードは次のように行く必要があります。

getError(event:Event){ 
    //Do whatever you want 
} 
+0

編集した質問を確認してください。別のコンポーネントに渡すデータではありません。これは、app-root要素のhtmlの外側に追加されます。 –

+0

'app-root'が主な' appComponent'なら 'validation-msg-content'は別のモジュールでなければなりません。私はあなたが2人の間のコミュニケーションをすることができるかどうかはわかりません。簡単な解決法は、 'app-root'の内部で' validation-msg-content'を移動させ、フォームのための別の 'component'を作成することです。 – Rajan471

+0

ng-bootstrap.github.io/#/components/popover/examplesの本文セクションに「popover」を追加してください。メッセージを本文に追加する必要があります。 –

関連する問題