2016-06-29 12 views
0

コメント付きの詳細ページがあります。 1つのコメントのために、私は@Componentを作成しました。トリックは、すべてのコメントが子コメントを持つことができますです。パラメータ付きコンポーネント内のAngular2呼び出しコンポーネント

some info here... 
<single-comment ngFor... [comment]="'hi comment'"></single-comment> 

とシングルcomment.htmlは次のようになります:コンポーネント自体

<ion-item no-padding> 
    <small dark> 
    <strong>{{comment}}</strong> 
    </small> 
    <ng-content></ng-content> 
    <single-comment [comment]="'ANOTHER comment'"></single-comment> 
</ion-item> 

:ここ

は私details.htmlがどのように見えるかだ

@Component({ 
    selector: 'single-comment', 
    templateUrl: 'single-comment.html' 
}) 
export class SingleComment { 
    @Input() comment: string; 

    constructor() { 
    } 

    ngAfterContentInit() { 
     console.log('new comment', this.comment); 
    } 
} 

事は、第二の別名です。子コンポーネントが呼び出されることはありません。

さらに、例をよく示すPlunkrコードを作成しました。ここにPlunkrが表示されます:https://plnkr.co/edit/w5kWE6QdbEoXIpqLI4dc?p=preview。 plunkrの例の「詳細」ページはhome.htmlで、@Component自体も格納されています。

これはAngular2バグですか、それともまったく不可能な動作ですか?私の解決策は、ネストされたコメントを表示することですが、2番目のコメントを読み込むことができないので、私は行き詰まっています。

これに対する解決方法はありますか、それとも私がやろうとしていることを達成するためのよりよい方法ですか?

ありがとうございました。 @NgModuleの導入とdirectivesforwardRef@NgModuleへの移行で

+2

だから私が正しく理解していれば、あなたは現在、シングルコメントディレクティブを定義するHTML内の単一のコメントディレクティブを使用しようとしていますか? - それは、(これが成功すれば)あなたは "他のコメント"と言った無限ループのコメントを作成することを意味するでしょう –

+1

http://stackoverflow.com/questions/37746516/use-コンポーネントそのもの/ 37747022#37747022 –

+0

@JarodMoser。このシナリオでは、私は無限ループを取得します。現在のコメントにサブコメントがあるかどうかを確認するテンプレートに単純なif文を追加すると、これが解決されます。 – gregor

答えて

2

更新

もう必要ありません。

あなたは(再帰的)自体の内部コンポーネントを使用したい場合は@Component()デコレータは、クラスとクラスの前に来るので、あなたは、他のコンポーネントまたはディレクティブのようprovidersに追加する必要があり、それが宣言される前に、あなたはまた、あなたはまた、再帰がどこかで終わるようにする必要がありforwardRef

import {Component, forwardRef, Input} from '@angular/core' 

@Component({ 
    selector: 'single-comment', 
    templateUrl: 'single-comment.html', 
    directives: [forwardRef(() => SingleComment)] 
}) 
export class SingleComment { 
    @Input() comment: string; 

    constructor() { 
    } 

    ngAfterContentInit() { 
     console.log('new comment', this.comment); 
    } 
} 

を必要とするか、またはあなたがスタックを取得します参照することはできませんオーバーフローする。 Plunkerでは*ngIfを使用して行われます:

Plunker example

+1

非常にGüntherありがとうございます。これはまさに私が探しているものです。私はif文がなくてもかなり簡単なplunkerを投稿しているので、まったく終了しない再帰のように見えます。私は、currentCommentにサブコメントがあるかどうかをチェックするテンプレートのコード部分を削除しました。もしそうなら、 ''ディレクティブを再度使用します。私は 'Directive:[SingleComment]'を追加しようとしましたが、それは完全にアプリケーションを壊しました、そして、私はもう詳細appに来ることができませんでした。コンソールにエラーや何も印刷されていない。完全な例を提供していただきありがとうございます。 – gregor

+0

うれしいことを聞いてうれしいです:) –

関連する問題