Часть 1 "#test" - undefined при использовании * ngIf
При ссылке на ввод, который может быть скрыт/ "уничтожен" (поскольку используется * ngIf и некоторые из элементов уничтожены), локальная переменная, созданная синтаксисом hashtag # (#test в приведенном ниже примере) angular2 не работает, даже если элемент существует на странице.
Код был:
@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();
}
}
В предупреждении отображается "undefined", потому что ничего не передается этой функции.
Есть ли решение, чтобы заставить его работать? Моя цель - сфокусировать элемент, который будет создан.
Решение, данное Марк Райкок: создать директиву с afterViewInit, который использует elementRef и вызывает .focus() для элемента.
См. этот плункер для рабочей версии части 1: http://plnkr.co/edit/JmBBHMo1hXLe4jrbpVdv?p=preview
Часть 2, как переориентировать этот элемент после первоначального создания
Как только проблема "фокус после создания" исправлена, мне нужен способ перефокусировки() компонента, например, в "test.focus()" (где #test - это локальное имя переменной для ввода, но не может использоваться так, как я продемонстрировал ранее).
Несколько решений, заданных Марком Райкоком