Как вызвать функцию родительского компонента при изменении входных данных дочернего компонента?Как наблюдать за изменениями входных элементов в ng-содержимом
Ниже представлена структура HTML.
# app.comopnent.html
<form>
<textbox>
<input type="text">
</textbox>
</form>
# textbox.component.html
<div class="textbox-wrapper">
<ng-content>
</div>
Ограничения, как и следующие.
- TextboxComponent имеет
ng-content
и нужно проецироватьinput
элемент к нему. - Извлечь событие в текстовое полеКомпонент, когда элемент
input
вводит что-то. - Не хотите, чтобы элемент
input
имел больше атрибутов, например.<input type="text" (input)="event()">
.
Я пишу код, но не могу найти решение ...
# input.directive.ts
@Directive({ selector: 'input', ... })
export class InputDirective {
ngOnChanges(): void {
// ngOnChanges() can observe only properties defined from @Input Decorator...
}
}
# textbox.component.ts
@Component({ selector: 'textbox', ... })
export class TextboxComponent {
@ContentChildren(InputDirective) inputs: QueryList<InputDirective>;
ngAfterContentInit(): void {
this.inputs.changes.subscribe((): void => {
// QueryList has a changes property, it can observe changes when the component add/remove.
// But cannot observe input changes...
});
}
}
Почему вы не хотите использовать выход как ? Как вы можете быть уверены, что другие разработчики (или даже вы) добавляют только элементы ввода в разметку TextboxComponent? – rrjohnson85
Потому что я должен добавить привязку вывода к элементу 'input', и это многословно, если я хочу использовать его. Но я могу использовать 'host: {(input): 'event()'}' свойство в InputDirective. Самая большая проблема заключается в том, что TextboxComponent с использованием 'ng-content' может обнаруживать, когда InputDirective вводится что-либо. –