2017-12-18 8 views
0

私は別のコンポーネントをクリックして追加します。ユーザーはコンポーネントを追加して削除することもできますが、コンポーネントを削除することができます。角度4のクリックでコンポーネントリファレンスを取得します。私はその参照クリックして角をつけてコンポーネントを参照する

を知っている場合にのみ成分を除去する機能を知ってここ は app.component.ts

@Component({ 
    selector: 'question-paragraph', 
    template: `<div class="form-group container"> 
    <textarea></textarea> 
    </div>`, 
}) 
export class QuestionParagraphComponent { } 

@Component({ 
    selector: 'question-image', 
    template: `<div class="form-group container"> 
    <form enctype="multipart/form-data" action="" method="post"> 
     <p>Upload Image</p> 
     <input type="file" name="uploaded_file[]" /> 
    </form> 
    </div>`, 
}) 
export class QuestionImageComponent { } 

にロードされているサンプルのコンポーネントであり、それは

if (item=='question') { 
     this.addService.appendComponentToBody(QuestionDetailComponent); 
     this.removeComponent(this.sg[this.sg['question_id']]); 
    } else if (item=='image') { 
     this.addService.appendComponentToBody(QuestionImageComponent); 
     this.removeComponent(this.sg[this.sg['question_id']]); 
     let componentRef = this.addService.appendComponentToBody(QuestionTypeComponent); 
     this.sg['ComRef'] = componentRef; 
    } 

それらを追加する機能です

removeComponent(componentRef){ 
    this.appRef.detachView(componentRef.hostView); 
    componentRef.destroy(); 
    } 

誰でも私に教えてください。 k、ありがとう。

+0

なぜあなたは最初の場所でのページにコンポーネントを追加します。テンプレートはあなたのためにそれを行う必要があります。アイテムを繰り返し処理するにはngForを使用し、ngForの内部では、アイテムタイプが質問の場合は質問コンポーネントを表示し、アイテムタイプが画像の場合はイメージコンポーネントを表示します。コンポーネントを削除するには、配列から項目を削除するだけです。 ngForはあなたのために一致するコンポーネントを削除します。それが角度の基本原理です。 –

+0

ngForは特定のテンプレートを繰り返し処理するので、ユーザは必要なコンポーネントを読み込むことができるので、そのコンポーネント参照を削除する必要があります。上の例では、40〜50個の異なるコンポーネントがあります。ユーザーが入力できるすべての入力を確認します。ありがとう –

+0

コードの2つのifブロックは、2種類のコンポーネントをハードコードします。だから私はどのように "ユーザーが任意のコンポーネントをロードすることができます"見ていない。私はちょうどテンプレートで同じことをすることをお勧めします。 –

答えて

0

通常、コンポーネントを動的に追加すると、それを親要素に追加します。リファレンスを追加し、その子にアクセスするコンポーネントに@ViewChildrenを追加できます。 2番目のパラメータは、あなたが動的に追加子にアクセスしたいものであるタイプViewContainerRefであり:

@ViewChildren(DynamicComponent, { read: ViewContainerRef }) components: QueryList<DynamicComponent> 

また、あなたが同様に使用さcreateComponentメソッドの戻り値を使用している可能性があります。

UPDATE: あなたのコンポーネントからの変更を購読することができますが、同様の参照:

this.components.changes().subscribe(x=> console.log(x)); 
関連する問題