প্রতিটি কীপ্রেসে কৌণিক 2 পরিবর্তন ইভেন্ট


282

ইনপুটটির ফোকাস পরিবর্তিত হওয়ার পরে পরিবর্তনের ইভেন্টটি ডাকা হয়। আমি কীভাবে এটি তৈরি করতে পারি যাতে ইভেন্টটি প্রতিটি কীপ্রেসে আগুন লাগে?

<input type="text" [(ngModel)]="mymodel" (change)="valuechange($event)" />
{{mymodel}}

প্রতিটি কীপ্রেস বিটিডব্লিউ-তে দ্বিতীয় বাইন্ডিং পরিবর্তন হয়।

উত্তর:


472

আমি কেবল ইভেন্টের ইনপুটটি ব্যবহার করেছি এবং এটি নীচে সূক্ষ্মভাবে কাজ করেছে:

html ফাইলটিতে:

<input type="text" class="form-control" (input)="onSearchChange($event.target.value)">

.ts ফাইলটিতে:

onSearchChange(searchValue: string): void {  
  console.log(searchValue);
}

ভাল একটা. আমার জন্য কাজ কর.
গোডেকরে

এটি ঠিক আমি যা খুঁজছিলাম
ফ্রান্সেস্কো বোর্জি

আমরা কিছু সময়ের জন্য কীভাবে বিলম্ব করব?
মাহমুদ হবুবাতি

দুর্দান্ত কাজ! আপনাকে ধন্যবাদ
বেধ পেরি

দুর্দান্ত কাজ করে, অনেক অনেক ধন্যবাদ
রাহুল লাদ

193

ব্যবহার করুন ngModelChangeবিচ্ছেদ দ্বারা [(x)]তার দুই টুকরা, অর্থাত, সম্পত্তি databinding এবং ইভেন্ট বাঁধাই মধ্যে শব্দবিন্যাস:

<input type="text" [ngModel]="mymodel" (ngModelChange)="valuechange($event)" />
{{mymodel}}
valuechange(newValue) {
  mymodel = newValue;
  console.log(newValue)
}

এটি ব্যাকস্পেস কীটির জন্যও কাজ করে।


5
কিন্তু কক্সাটি বাক্স সিনট্যাক্সে ব্যবহার করার সময় এটি কেবলমাত্র মডেলটিকে পরিবর্তন করে, তবে আপনি পরিবর্তনের ইভেন্টে কিছু আটকান না।
গিওরা গুটসাইট 23'17

4
এটি দ্বিমুখী ডেটা বাইন্ডিংয়ের সেরা উত্তর। গ্রহণযোগ্য উত্তর হওয়া উচিত!
1993

4
ব্যাকস্পেস কী মডেলটি আপডেট করছে না
করণ গারগ

4
সমাধানটি সঠিক। তবে, সচেতন থাকুন যে এনগিমোডেল চেঞ্জ মান আপডেটের আগে বরখাস্ত করা হয়। সুতরাং এই উদাহরণে থাকা 'নিউভ্যালুতে' আপনি যে টিপটি দিয়েছিলেন সেক্ষেত্রে একটি মডেল রয়েছে - যাতে আপনার কাছে আপডেট হওয়া মডেলটি নেই। আপনি যদি সর্বাধিক সাম্প্রতিক মডেল মান পেতে চান তবে (কীআপ) ইভেন্টটি ব্যবহার করুন।
dave0688

1
@ সতেশকুমারআল্লি আপনার কোন অ্যাঙ্গুলারের সংস্করণ রয়েছে? আমার জন্য এটি কৌণিক 6.1.3
জেট

96

(কীআপ) ইভেন্টটি আপনার সেরা বাজি।

আসুন দেখুন কেন:

  1. (পরিবর্তন) যেমন আপনি উল্লিখিত ট্রিগারগুলি কেবল তখনই ইনপুট ফোকাস হারায়, তাই ব্যবহার সীমিত।
  2. (কীপ্রেস) কী টিপতে ট্রিগার করে তবে ব্যাকস্পেসের মতো নির্দিষ্ট কীস্ট্রোকগুলিতে ট্রিগার করে না।
  3. (কীডাউন) প্রতিবার একটি চাবি নীচে নামানোর সময় ট্রিগার করে। সুতরাং সর্বদা 1 অক্ষর দ্বারা পিছিয়ে থাকে; কীস্ট্রোকটি নিবন্ধিত হওয়ার আগে এটি উপাদান হিসাবে রাজ্য পায়।
  4. (কীআপ) হ'ল আপনার সেরা বাজি কারণ এটি প্রতিবার কী কী পুশ ইভেন্টটি সম্পূর্ণ হওয়ার সাথে সাথে ট্রিগার করে, তাই এতে সাম্প্রতিকতম চরিত্রটিও অন্তর্ভুক্ত রয়েছে।

সুতরাং (কীআপ) সাথে যেতে সবচেয়ে নিরাপদ কারণ এটি ...

  • প্রতি পরিবর্তন (ইভেন্ট) এর বিপরীতে প্রতিটি কীস্ট্রোকে একটি ইভেন্ট নিবন্ধভুক্ত করে
  • (কীপ্রেস) উপেক্ষা করা কীগুলি অন্তর্ভুক্ত করে
  • (কীডাউন) ইভেন্টের মতো কোনও ল্যাগ নেই

4
উত্তরের একটি হিসাবে উল্লিখিত হিসাবে, ইনপুট ইভেন্টটি সত্যিই ভাল কাজ করে। keyupনিশ্চিত যে নিরাপদ বিকল্পগুলির মধ্যে একটি তবে inputঘটনাটি এক ধাপ এগিয়ে keyupkeyupভিন্ন input, পাঠ্যবক্সের মান অন্য কোনও উপায়ে যেমন বাইন্ডিং দ্বারা পরিবর্তিত হয় তা কাজ করে না।
গ্রহ_হান্টার

1
সাগর, আপনাকে অনেক ধন্যবাদ। এটি গ্রহণযোগ্য উত্তর হওয়া উচিত কারণ এটি কেবলমাত্র একমাত্র কাজের সাথে (change)পাশাপাশি কিছুকে সম্বোধন করতে পারে । গৃহীত উত্তর পুরোপুরি চুষে!
কোডি

কোন বিশেষ কারণ আছে যে আপনি এটি করতে চান (ngModelChange)?
স্নেলকয়েল

1
এটি নেটিভ হওয়ায় এটি গ্রহণযোগ্য এবং নিরাপদ উত্তর হওয়া উচিত এবং এটি আপনাকে সম্পূর্ণ নিয়ন্ত্রণ দেয় এবং এটি অত্যন্ত অভিব্যক্তিপূর্ণ, কারণ যাঁরা পড়েন তারা প্রত্যেকেই ঘটনাটি চালিত হওয়ার সময় জানে।
ফ্লোরিয়ান লেটজেব

1
@ থারিকুনগ্রোহটোমো না, এটি হবে না। আপনি যদি এরকম কিছু খুঁজছেন তবে (ইনপুট) ব্যবহার করুন।
সাগর

39
<input type="text" [ngModel]="mymodel" (keypress)="mymodel=$event.target.value"/>
{{mymodel}}

10
কাজ করে, তবে আশ্চর্যের বিষয় হল ব্যাকস্পেস কী কী-টিপস হিসাবে স্বীকৃত নয়?
ড্যানিয়েল

22
আপনি এটি ব্যবহার করতে keydownবা keyupপরিবর্তে চাইবেন । কিছু কী কেবল আগুন দেয় না keypress। আরও দেখুন stackoverflow.com/questions/4843472/...
গুন্টার Zöchbauer

আমি কীডাউন, কীআপ এবং ইভেন্টগুলি পরিবর্তন করার চেষ্টা করেছি কিন্তু যখন ইনপুটটি ডাব্লু ইভেন্টের হ্যান্ডলারটি আমাকে খালি স্ট্রিংয়ের প্রতিবেদন করে; যখন ইনপুট হয় আমরা ইভেন্ট হ্যান্ডলার আমাকে ইনপুট হিসাবে প্রতিবেদন করে। আপনি দয়া করে ব্যাখ্যা করতে পারেন কেন এই আচরণ?
পূর্বাভাস

কিপ্রেস ব্যবহার করুন। ইন-ইনপুটটি কী-ডাউনটিতে এখনও পরিবর্তন হয়নি।
গন্টার জ্যাচবাউর

1
এটি অদ্ভুত, তবে আমি এখানে একটি ইনপুট ল্যাগ পেয়েছি যেখানে পরবর্তী কীপ্রেস না হওয়া পর্যন্ত মানটিতে টাইপ করা মান থাকে না।
ম্যাট এল্যান্ড

25

এই ধরণের কেসগুলি হ্যান্ডেল করার একটি ভিন্ন উপায় হ'ল ফর্মট্রোলটি ব্যবহার করা এবং এটির সাবস্ক্রাইব করা valueChangesযখন আপনার উপাদানটি আরম্ভ করা হয়, যা আপনাকে HTX অনুরোধগুলি সম্পাদন করার মতো উন্নত প্রয়োজনীয়তার জন্য 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);
      });
  }
}

2
এটি নিখুঁত। এটি async http অনুরোধগুলির জন্য এটি ব্যবহার করার সময় চ্যাটি শব্দটি কমিয়ে দেয়। ইতিমধ্যে পরিবর্তন ইভেন্ট শ্রোতা সেট আপ। উজ্জ্বল! ধন্যবাদ!
পাথর

এটা খুশী হয়েছে। ধন্যবাদ @ পূর্বপুরুষ
সালেম ওয়ারডানি

1
একাধিক নিয়ন্ত্রণের ক্ষেত্রে একই কোড প্রয়োগ করা যেতে পারে FormGroup
বিকাশ কুমার

20

কৌনিক এনজিএমডেল সিঙ্ক্রোনাস রাখে এমন গোপন ইভেন্টটি ইভেন্ট কল ইনপুট । সুতরাং আপনার প্রশ্নের সর্বোত্তম উত্তরটি হ'ল:

<input type="text" [(ngModel)]="mymodel" (input)="valuechange($event)" />
{{mymodel}}

এটি আমার জন্য @
আন্দ্রেই

(ইনপুট) ইভেন্টটি এজ এবং আইই ব্রাউজারগুলিতে সমর্থিত নয়। এজ ব্রাউজারে এর বিকল্প কী?
সুধাকর

6
<input type="text" (keypress)="myMethod(myInput.value)" #myInput />

সংরক্ষণাগার .ts

myMethod(value:string){
...
...
}

এসও আলরিকে আপনাকে স্বাগতম, দয়া করে ব্যাখ্যা করুন যে আপনার কোড কীভাবে সমস্যার সমাধান করে।
সিপিএইচপিথন

4

আপনি যা খুঁজছেন তা হ'ল

<input type="text" [(ngModel)]="mymodel" (keyup)="valuechange()" />
{{mymodel}}

তারপরে this.mymodelআপনার .ts ফাইলে সীমাবদ্ধ অ্যাক্সেস করে ডেটা দিয়ে যা যা ইচ্ছা করুন।



1

প্রতিক্রিয়াশীল ফর্মগুলির জন্য, আপনি সমস্ত ক্ষেত্রে বা কেবল একটি নির্দিষ্ট ক্ষেত্রে করা পরিবর্তনগুলিতে সাবস্ক্রাইব করতে পারেন।

একটি ফর্মগ্রুপের সমস্ত পরিবর্তন পান:

this.orderForm.valueChanges.subscribe(value => {
    console.dir(value);
});

একটি নির্দিষ্ট ক্ষেত্রের পরিবর্তন পান:

this.orderForm.get('orderPriority').valueChanges.subscribe(value => {
    console.log(value);
  });

0

আমি একটি নম্বর ক্ষেত্রে কীআপ ব্যবহার করেছি, তবে আজ আমি ক্রোমে লক্ষ্য করেছি যে কীপআপ দ্বারা স্বীকৃত নয় এমন মান বাড়াতে / হ্রাস করতে ইনপুটটিতে উপরে / ডাউন বোতাম রয়েছে।

আমার সমাধানটি কীআপ ব্যবহার এবং একসাথে পরিবর্তন করা:

(keyup)="unitsChanged[i] = true" (change)="unitsChanged[i] = true"

প্রাথমিক পরীক্ষাগুলি সূক্ষ্মভাবে কাজ করে তা নির্দেশ করে, আরও পরীক্ষার পরে যদি কোনও বাগ খুঁজে পাওয়া যায় তবে তা আবার পোস্ট করবে।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.