Я хочу создать компонент «my-form-group», состоящий из метки, любого типа элемента ввода (ввод, флажок, ...) и div для результатов проверки. Я хочу использовать контентную проекцию для вставки ввода после метки. Что-то вроде этого:Доступ к произвольному дочернему элементу в angular2
<form [ngFormModel]="myForm" (ngSubmit)="onSubmit()">
<my-form-group>
<input type="text"
class="form-control"
[ngFormControl]="myForm.controls['name']">
</my-form-group>
<form>
Компонент может выглядеть следующим образом:
@Component({
selector: 'my-form-group',
template: `
<div class="form-group">
<label for="name">Name<span [ngIf]="name.required"> *</span></label>
<ng-content></ng-content>
<div [hidden]="name.valid || name.pristine" class="alert alert-danger">
Please check your input
</div>
</div>`
})
...
Я хочу использовать состояние проецируемого компонента, чтобы скрыть или показать «необходимую» звездочку и DIV проверки. Насколько я знаю, доступ к проецируемому компоненту можно получить, используя @ContentChild()
и в ngAfterContentInit()
, но я думаю, у меня должен быть специальный компонент для использования этого.
Каков наилучший способ получить доступ к контроллеру проецируемого компонента, если я не знаю точного компонента?
Что бы вы использовать для запроса '@ContentChildren()' ? В качестве «селектора» можно использовать AFAIK только переменную шаблона или тип компонента/директивы. –
Вам нужно будет ввести 'ElementRef', а затем вы можете использовать' this.elementRef.nativeElement.querySelectorAll (...) ', чтобы иметь возможность использовать селекторы CSS. –
, но это не даст 'ComponentRef' право? так что никакой пользы от использования ElementRef' –