में इनपुट तत्व परिवर्तनों का निरीक्षण कैसे करें जब बच्चे घटक इनपुट इनपुट में परिवर्तन करते हैं तो पैरेंट घटक के फ़ंक्शन को कैसे कॉल करें?एनजी-सामग्री
नीचे 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...
});
}
}
क्यों नहीं करते आप एक निर्गम का उपयोग करना चाहते बाध्यकारी, जैसे <इनपुट प्रकार = "पाठ" (इनपुट) = "घटना()">? आप कैसे सुनिश्चित कर सकते हैं कि अन्य devs (या यहां तक कि आप) केवल टेक्स्टबॉक्स कॉम्पोनेंट के मार्कअप में इनपुट तत्व जोड़ते हैं? – rrjohnson85
क्योंकि मुझे 'इनपुट' तत्व को बाध्यकारी आउटपुट जोड़ना चाहिए और यदि मैं इसका उपयोग करना चाहता हूं तो यह वर्बोज़ है। लेकिन मैं बजाय 'होस्ट: {(इनपुट):' event() '}' संपत्ति का उपयोग इनपुट डायरेक्टिव में कर सकता हूं। सबसे बड़ी समस्या यह है कि टेक्स्टबॉक्सकंपेंटेंट 'एनजी-कंटेंट' का उपयोग कर पता लगा सकता है जब इनपुट डायरेक्टिव को कुछ भी इनपुट किया गया था। –