2017-10-29 11 views
0

で壮大祖父母コンポーネントへの参照を取得します:は、私がこれに似たコンポーネントの階層を持つ角度

gggrandparent-> ggrandparent -> grandparent -> parent -> child 

子供がabsolute LYを表示してgggrandparentの高さを認識する必要があります。 gggrandparentの高さは、子供の一部がdisplay:noneであり、childがこの変更に対応する必要があるため、時間外に変更されます。

gggrandparentの高さをchild.component.tsファイル内に収めるためのエレガントな方法は何ですか? @Input()の多重度を渡すことは過度のようです。私が考えることができる唯一の他のオプションはObservableパターンとプレーンJSを実装することですが、私は角度がこのシナリオを処理する独自の方法を持っています。

答えて

1
@Directive({ 
    selector: '[parentHeight]' 
}) 
export class ParentHeightDirective { 
    constructor(private elementRef:ElementRef) {} 

    int get height() { 
    return this.elementRef.nativeElement.height; 
    } 
} 
<grand-grand-parent parentHeight> 
    <grand-parent> 
    <parent> 
     <child></child> 
    </parent> 
    </grand-parent> 
</grand-grand-parent> 
@Component({ 
    selector: 'child', 
    ... 
}) 
export class ChildComponent { 
    constructor(private parentHeight:ParentHeightDirective) {} 

    ngOnInit() { // or any other method 
    console.log(this.parentHeight.height); 
    } 
} 

parentHeightの間の任意の成分に添加されていない場合、依存性注入は、最初のを注入するので、それは(AppComponent及びアプリケーションに向かって上向きに注入成分から見て発見これだけ作品ルートスコープ)。
ParentHeightDirectiveを使用せずにこれを行うこともできますし、コードをGrandParentComponentに入れて代わりにそれを挿入することもできますが、ディレクティブは再利用性が良く、ネストされたGrandGrandParentComponentを許可します。この指令を適用してください。

+0

お世話になりました。子コンストラクタでparentHeight:ParentHeightを使用しました。これはおそらくタイプミスでしょうか?私はそれをprivateHeight:ParentHeightDirectiveに置き換えました。それでも、ngOnInit内で未定義の値が得られています – sanjihan

+0

高さが常に定義されていないため、offsetHeightが表示されます。問題は、その表示です:返された高さにも要素が含まれていないため、目に合わない背の高さが返されます。 – sanjihan

+0

それは問題の純粋なDOMの部分です。私はちょうど質問の角の部分に対処しようとしました。 DOMについての質問には十分な情報がありません。あなたは正しいです、私は '指令'を忘れてしまった –

関連する問題