Я пытаюсь создать пользовательский компонент, который выглядит как форма поиска.Я создал SearchComponent
с селектором my-search
, внутри которого я поместил элемент HTML <input>
с прикрепленной директивой InputDirective
с селектором [myInput]
:
<my-search>
<input myInput>
</my-search>
Проблема заключается в какобнаружить изменения из InputDirective
внутри SearchComponent
?Например: я должен включить или отключить кнопку, когда пользователь вводит какой-то текст во ввод:
search.component.html
<ng-content select="[myInput]"></ng-content>
<button type="button" [disabled]="!searchText">Search</button>
Я пытаюсь подписаться на изменениядиректива внутри компонента, но она не работает.
search.component.ts
@Component({
selector: 'my-search',
templateUrl: './search.component.html'
})
export class SearchComponent implements AfterContentInit {
@ContentChild(InputDirective) input: InputDirective;
ngAfterContentInit() {
this.input.changes.subscribe(changes => console.log(changes));
}
}
Также я пытаюсь экспортировать собственный ввод в свойстве element
.
input.directive.ts
@Directive({
selector: '[myInput]'
})
export class InputDirective {
element: HTMLInputElement;
constructor(private elementRef: ElementRef) {
this.element = this.elementRef.nativeElement;
}
}
И при попытке получить значение ввода с помощью геттера, но оно тоже не работает.
search.component.ts
@Component({
selector: 'my-search',
templateUrl: './search.component.html'
})
export class SearchComponent implements AfterContentInit {
@ContentChild(InputDirective) input: InputDirective;
get searchText(): string {
return this.input.element.value;
}
}
Может кто-нибудь помочь мне с этим?Вот ссылка для экспериментов.