जवाबों:
मैंने सिर्फ इवेंट इनपुट का उपयोग किया है और यह निम्नानुसार काम करता है:
.html फ़ाइल:
<input type="text" class="form-control" (input)="onSearchChange($event.target.value)">
.ts फ़ाइल:
onSearchChange(searchValue: string): void {
console.log(searchValue);
}
सिंटैक्स को इसके दो टुकड़ों में विभाजित ngModelChangeकरके उपयोग करें [(x)], अर्थात, संपत्ति डेटाबाइंडिंग और ईवेंट बाइंडिंग:
<input type="text" [ngModel]="mymodel" (ngModelChange)="valuechange($event)" />
{{mymodel}}
valuechange(newValue) {
mymodel = newValue;
console.log(newValue)
}
यह बैकस्पेस कुंजी के लिए भी काम करता है।
आइए देखें क्यों:
keyupहालांकि, सबसे सुरक्षित विकल्पों में inputसे एक है , घटना एक कदम आगे है keyup। keyupइसके विपरीत input, अगर कोई पाठ बॉक्स के मान को किसी अन्य तरीके से बदला जाता है जैसे कि बंधन।
(change)एक समाधान के साथ वास्तव में संबोधित करने के लिए एकमात्र है और फिर कुछ। स्वीकृत उत्तर पूरी तरह से बेकार है!
(ngModelChange)?
<input type="text" [ngModel]="mymodel" (keypress)="mymodel=$event.target.value"/>
{{mymodel}}
keydownया keyupइसके बजाय उपयोग करना चाह सकते हैं । कुछ कुंजियों में आग नहीं लगती है keypress। यह भी देखें stackoverflow.com/questions/4843472/…
ऐसे मामलों को संभालने का एक अलग तरीका है फॉर्मकंट्रोल का इस्तेमाल करना और valueChangesजब आपका कंपोनेंट इनिशियलाइज़ हो जाए तो उसे सब्सक्राइब कर लें , जिससे आप http रिक्वेस्ट जैसे एडवांस रिक्वायरमेंट के लिए rxjs ऑपरेटर्स का इस्तेमाल कर सकेंगे , एक डिक्शनरी तब तक लागू करेंगे, जब तक यूजर एक वाक्य लिखकर खत्म न कर ले, उसकी वैल्यू ले लें। और पिछले छोड़ें, ...
import {Component, OnInit} from '@angular/core';
import { FormControl } from '@angular/forms';
import { debounceTime, distinctUntilChanged } from 'rxjs/operators';
@Component({
selector: 'some-selector',
template: `
<input type="text" [formControl]="searchControl" placeholder="search">
`
})
export class SomeComponent implements OnInit {
private searchControl: FormControl;
private debounce: number = 400;
ngOnInit() {
this.searchControl = new FormControl('');
this.searchControl.valueChanges
.pipe(debounceTime(this.debounce), distinctUntilChanged())
.subscribe(query => {
console.log(query);
});
}
}
FormGroup
कोणीय ngModel तुल्यकालिक रहता है कि गुप्त घटना घटना कॉल इनपुट है । इसलिए आपके प्रश्न का सबसे अच्छा उत्तर होना चाहिए:
<input type="text" [(ngModel)]="mymodel" (input)="valuechange($event)" />
{{mymodel}}
<input type="text" (keypress)="myMethod(myInput.value)" #myInput />
संग्रह
myMethod(value:string){
...
...
}
आप जो खोज रहे हैं, वह है
<input type="text" [(ngModel)]="mymodel" (keyup)="valuechange()" />
{{mymodel}}
फिर this.mymodelअपने .ts फ़ाइल में बाउंड एक्सेस करके डेटा के साथ जो चाहें करें।
मेरे मामले में, समाधान है:
[ngModel]="X?.Y" (ngModelChange)="X.Y=$event"
रिएक्टिव फॉर्म्स के लिए, आप सभी फ़ील्ड्स या केवल किसी विशेष फ़ील्ड में किए गए परिवर्तनों की सदस्यता ले सकते हैं।
फ़ॉर्म समूह के सभी परिवर्तन प्राप्त करें:
this.orderForm.valueChanges.subscribe(value => {
console.dir(value);
});
किसी विशिष्ट फ़ील्ड का परिवर्तन प्राप्त करें:
this.orderForm.get('orderPriority').valueChanges.subscribe(value => {
console.log(value);
});
मैं एक नंबर फ़ील्ड पर की-अप का उपयोग कर रहा हूं, लेकिन आज मैंने क्रोम में देखा कि इनपुट में ऊपर / नीचे बटन हैं, जो कि कीप द्वारा पहचाने नहीं गए मान को बढ़ाने / घटाने के लिए हैं।
मेरा समाधान एक साथ कीप और परिवर्तन का उपयोग करना है:
(keyup)="unitsChanged[i] = true" (change)="unitsChanged[i] = true"
प्रारंभिक परीक्षण यह इंगित करता है कि यह ठीक काम करता है, यदि आगे परीक्षण के बाद कोई बग पाया गया तो वापस पोस्ट किया जाएगा।