2017-07-21 4 views
5

Ich versuche eine Template-Variable für ein Element zu definieren und benutze sein verstecktes Attribut, um zu identifizieren, ob das Element tatsächlich im DOM vorhanden ist und dann ein anderes Element darauf anzeigt. Wenn es jedoch eine strukturelle Anweisung gibt, scheint die Template-Variable keinen Wert zurückzugeben.Zugriff auf Angular 2 Template-Variable in ngIf

<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}} 

Ausgang ist

rbtn: 
ebtn: false 
dline: 

Wie Sie sowohl die Template-Variablen auf Elemente sehen können, enthält Attribute ngIf und wpHasAnyPermission sind keine Werte zurück.

Was will ich schließlich tun ist resendEmailBtn und editAccountBtn in ngIf von hr zu verwenden, um den Teiler zu entscheiden, anzuzeigen.

Was ist der beste Weg, dies zu lösen? Ich möchte vermeiden, mit Komponentencode zu arbeiten. Versuchen Sie, dies in HTML zu lösen.

Antwort

3

Die Variable ist außerhalb des Elements *ngIf nicht verfügbar.

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

wird von

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

und divi ist nur verfügbar, im <template> Element ersetzen werden.

Sie können

@ViewChild('editAccountBtn') editAccountBtn:ElementRef; 

an Ihre Komponenten-Klasse hinzufügen, um es innerhalb der gesamten Komponenten-Vorlage zur Verfügung zu stellen. Es hat nur einen Wert, wenn das abgefragte Element zum DOM hinzugefügt wird. Wenn es in einem *ngIf ist, der false auswertet, wird der Wert null sein.

+0

Ich bin gespannt, wie 'editAccountBtn' außerhalb zugänglich war. Was Sie erwähnt haben, gilt nur für Elemente mit strukturellen Attributen? Was wäre der beste Weg, um mein Problem zu lösen? – TechCrunch

+0

Ich habe meine Antwort aktualisiert. –

+0

Ich bin mir nicht sicher, ob ich die Frage klar gestellt habe. Was ich tun wollte, war '


' damit ich den Teiler nur anzeigen kann, wenn der Button vorhanden ist. Die Variable des hr-Elements interessiert mich nicht. – TechCrunch

Verwandte Themen