Warum template-lokale Variablen sind nicht verwendbar in templates bei der Verwendung von *ngIf?

Teil 1: "#test" ist nicht definiert, wenn mit *ngIf

Beim verweisen auf einen Eingang, der versteckt werden kann/"zerstört" (weil die *ngIf verwendet wird, und einige der Elemente zerstört werden), wird die lokale variable erstellt, indem der hashtag syntax # (#test im Beispiel unten) funktioniert nicht, auch wenn das element vorhanden ist, in die Seite.

War der code:

@Component({
    selector: 'my-app',
    template: `<h1>My First Angular 2 App</h1>
    <button (click)="focusOther(test)">test</button>
    <input #test *ngIf="boolValue" >
    `
})
export class AppComponent { 

  private isVisible = false;

  focusOther(testElement){
    this.isVisible = true;
    alert(testElement);
    testElement.focus();
  }

}

Die Warnung zeigt undefined, weil nichts übergeben wird, die Funktion.

Gibt es eine Lösung, damit es funktioniert?
Mein Ziel ist es, den Fokus auf ein element erstellt werden.

Lösung gegeben, die durch Mark Rajcok: stellen eine Richtlinie mit einer afterViewInit verwendet elementRef und Anrufe .focus() auf das element.

Sehen diese plunker für eine funktionierende version von Teil 1:
http://plnkr.co/edit/JmBBHMo1hXLe4jrbpVdv?p=preview

Teil 2, wie neu zu konzentrieren, das element nach der anfänglichen Erstellung

Einmal dieses problem der "focus nach der Schöpfung" ist behoben, ich brauche einen Weg, um re-focus() eine Komponente, wie in "test.focus()" (wobei #test wird die lokale variable name für die Eingabe, nicht aber, wie ich gezeigt, vor).

Mehrere Lösungen gegeben durch Mark Rajcok

  • Siehe auch github.com/angular/angular/issues/6179
  • Ich füllte das Problem auf Winkel-repo, da es ein bug ist, wenn man die eigentliche Dokumentation, die besagt "Wir können eine lokale template-Variablen auf das gleiche element, auf ein gleichrangiges element oder seine untergeordneten Elemente.".
Schreibe einen Kommentar