2017-07-21 6 views
5

私は要素にテンプレート変数を定義しようとしています。隠し属性を使用して要素が実際にDOMに存在するかどうかを識別し、それに基づいて別の要素を表示します。しかし、もし構造ディレクティブがあれば、テンプレート変数は値を返さないようです。ngIfのAngular 2テンプレート変数へのアクセス方法

<hr class="divider" *ngIf="true" #divi> 
<div *ngIf="showResendWelcomeEmailButton"> 
    <a *wpHasAnyPermission="[{'something': true}]" 
    #resendEmailBtn> 
    Resend Welcome Email 
    </a> 
</div> 
<div class="pull-right"> 
    <a #editAccountBtn>Edit Account Details</a> 
</div> 

rbtn: {{resendEmailBtn?.hidden}} 
ebtn: {{editAccountBtn?.hidden}} 
dline: {{divi?.hidden}} 

出力あなたは属性ngIfwpHasAnyPermissionを含む要素のテンプレート変数の両方が値を返すされていない見ることができるように

rbtn: 
ebtn: false 
dline: 

です。私は最終的に何をしたいのか

は、分周器を表示するかを決定するhrngIfresendEmailBtneditAccountBtnを使用することです。

これを解決する最良の方法は何ですか?私はコンポーネントコードを扱わないようにしたい。これをHTMLで解決しようとします。

答えて

3

変数は、*ngIfが適用されている要素の外部では使用できません。

<hr class="divider" *ngIf="false" #divi> 

<template let-divi [ngIf]="false"> 
    <hr class="divider" > 
</template> 

diviによって置き換えされるだけ<template>要素内に利用できるようになります。

あなたは、全体のコンポーネントテンプレート内で使用できるようにするには、コンポーネントのクラスに

@ViewChild('editAccountBtn') editAccountBtn:ElementRef; 

を追加することができます。照会された要素がDOMに追加されたときのみ値を持ちます。 *ngIffalseと評価される場合、その値はnullになります。

+0

「editAccountBtn」が外部からどのようにアクセス可能であったのか不思議です。あなたが言及したのは、構造的な属性を持つ要素にのみ適用できますか?私の問題を解決する最良の方法は何ですか? – TechCrunch

+0

答えを更新しました。 –

+0

私は質問を明確に聞いたかどうか分かりません。私がしたいのは、 '


'でしたので、ボタンが存在するときだけディバイダを表示できます。私は 'hr'要素の変数については気にしません。 – TechCrunch

関連する問題