Làm thế nào để gọi hàm của thành phần gốc khi thành phần con quan sát đầu vào thay đổi?Làm thế nào để quan sát các thay đổi phần tử đầu vào trong ng-content
Dưới đây là cấu trúc HTML.
# app.comopnent.html
<form>
<textbox>
<input type="text">
</textbox>
</form>
# textbox.component.html
<div class="textbox-wrapper">
<ng-content>
</div>
Hạn chế như sau.
- TextboxComponent có
ng-content
và cần phải chiếu thành phầninput
vào đó. - Phát ra sự kiện trong TextboxComponent khi phần tử
input
được nhập vào nội dung nào đó. - Không muốn tạo thành phần
input
để có nhiều thuộc tính hơn, ví dụ:<input type="text" (input)="event()">
.
tôi đang viết mã, nhưng không thể tìm thấy một giải pháp ...
# 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...
});
}
}
Tại sao bạn không muốn sử dụng một sản lượng ràng buộc, như ? Làm thế nào bạn có thể chắc chắn rằng các nhà phát triển khác (hoặc thậm chí bạn) chỉ thêm các yếu tố đầu vào vào đánh dấu của TextboxComponent? – rrjohnson85
Bởi vì tôi nên nối thêm đầu ra vào phần tử 'input' và nó sẽ tiết nếu tôi muốn sử dụng nó. Nhưng tôi có thể sử dụng thuộc tính 'host: {(input): 'event()'}' trong InputDirective. Vấn đề lớn nhất là TextboxComponent sử dụng 'ng-content' có thể phát hiện khi InputDirective được nhập vào bất cứ thứ gì. –