আমি কৌনিক 2 তে "নির্বাচন" করে নতুন নির্বাচন পেতে পারি?


372

আমি কৌনিক 2 (টাইপস্ক্রিপ্ট) ব্যবহার করছি।

আমি নতুন নির্বাচন নিয়ে কিছু করতে চাই, তবে আমি যা পাই onChange()তা সর্বদা সর্বশেষ নির্বাচন। আমি কীভাবে নতুন নির্বাচন পেতে পারি?

<select [(ngModel)]="selectedDevice" (change)="onChange($event)">
   <option *ngFor="#i of devices">{{i}}</option>
</select>
onChange($event) {
    console.log(this.selectedDevice);
    // I want to do something here with the new selectedDevice, but what I
    // get here is always the last selection, not the one I just selected.
}

উত্তর:


749

আপনার যদি দ্বি-মুখী ডেটা বাইন্ডিংয়ের প্রয়োজন না হয়:

<select (change)="onChange($event.target.value)">
    <option *ngFor="let i of devices">{{i}}</option>
</select>

onChange(deviceValue) {
    console.log(deviceValue);
}

দ্বি-উপাত্তের ডেটা বাইন্ডিংয়ের জন্য ইভেন্ট এবং সম্পত্তির বাইন্ডিংগুলি পৃথক করুন:

<select [ngModel]="selectedDevice" (ngModelChange)="onChange($event)" name="sel2">
    <option [value]="i" *ngFor="let i of devices">{{i}}</option>
</select>
export class AppComponent {
  devices = 'one two three'.split(' ');
  selectedDevice = 'two';
  onChange(newValue) {
    console.log(newValue);
    this.selectedDevice = newValue;
    // ... do other stuff here ...
}

যদি devicesবস্তুর অ্যারে হয় তবে এর ngValueপরিবর্তে বাঁধুন value:

<select [ngModel]="selectedDeviceObj" (ngModelChange)="onChangeObj($event)" name="sel3">
  <option [ngValue]="i" *ngFor="let i of deviceObjects">{{i.name}}</option>
</select>
{{selectedDeviceObj | json}}
export class AppComponent {
  deviceObjects = [{name: 1}, {name: 2}, {name: 3}];
  selectedDeviceObj = this.deviceObjects[1];
  onChangeObj(newObj) {
    console.log(newObj);
    this.selectedDeviceObj = newObj;
    // ... do other stuff here ...
  }
}

Plunker- নতুন ফর্ম এপিআই ব্যবহার করে <form>
Plunker- ব্যবহার করে না<form>


আশ্চর্যের কথা ঠিক আছে তবে এনজিএমডেলের এখানে কী ভূমিকা আছে এখনও আমি বিভ্রান্ত হয়েছি আপনি কী তা ব্যাখ্যা করতে পারবেন?
পারদীপ জৈন

1
@ পারদীপজাইন, এনজিএমডেলের সাথে দ্বিমুখী ডেটা বন্ডিং ব্যবহার করে অ্যাংুলার 1 টি হয়) selectedDeviceব্যবহারকারী যখন আলাদা আইটেম নির্বাচন করে তখন স্বয়ংক্রিয়ভাবে আপডেট হয় এবং 2) যদি আমরা এর মান নির্ধারণ করি তবে selectedDeviceএনজিএমডেল স্বয়ংক্রিয়ভাবে ভিউটি আপডেট করবে। যেহেতু আমরাও একটি পরিবর্তন সম্পর্কে অবহিত হতে চাই আমি (change)ইভেন্টের বাধ্যবাধকতা যুক্ত করেছি। আমাদের এইভাবে এটি করা উচিত নয় ... আমাদের দ্বিমুখী ডেটা বাঁধাই করতে সক্ষম হওয়া উচিত [ngModel]="selectedDevice" and (ngModelChange)="onChange($event)", তবে আমি যেমন জানতে পেরেছি, onChange()প্রতিটি নির্বাচিত তালিকার জন্য এইভাবে দু'বার ফোন করা হবে।
রাজকোক

ঠিক আছে, আরও একটি জিনিস দয়া করে। আমি এর মান পেতে চাই: <option *ngFor="#course of course_array #i=index" #newone value={{course.id}} >{{course.course_name}}</option> course.course_nameএবং course.idউভয়ই কীভাবে আমি এই দুটি (পরিবর্তন) ফাংশনের মাধ্যমে প্রেরণ করতে পারি?
পারদীপ জৈন

1
@ হংবোমিয়াও, বিশেষ $eventপরিবর্তনশীল / চিহ্নটি কৌণিক টেম্পলেট বিবৃতিগুলির "বিবৃতি প্রসঙ্গে" অংশ part পরিবর্তে আমি লিখি (ngModelChange)="onChange('abc')"তাহলে newValueস্ট্রিং পাবেন abc। এটি কেবলমাত্র জাভাস্ক্রিপ্ট ফাংশন কলিং।
রাজকক

2
@ হংবোমিয়াও, [এনজিওভ্যালু] ব্যবহার করুন যদি আপনার কোনও অবজেক্ট থাকে। আপনার যদি আদিম ধরণের (স্ট্রিং, বুলিয়ান, পূর্ণসংখ্যার) একটি অ্যারে থাকে তবে [মান] ব্যবহার করুন।
মার্ক রাজকক

40

আপনি নির্বাচিত ট্যাগটিতে একটি রেফারেন্স ভেরিয়েবল তৈরি #deviceকরে পরিবর্তন হ্যান্ডলারের onChange($event, device.value)মধ্যে দিয়ে নতুন মানটি থাকা উচিত বলে আপনি সেই উপাদানটি ফেরত দিতে পারেন You

<select [(ng-model)]="selectedDevice" #device (change)="onChange($event, device.value)">
    <option *ng-for="#i of devices">{{i}}</option>
</select>

onChange($event, deviceValue) {
    console.log(deviceValue);
}

1
আপনি ngModelএখানে সীমাবদ্ধ নন , আপনি নামক একটি নতুন ভেরিয়েবলের সাথে আবদ্ধ device
লাক্স

4
কি রোল [(ngModel)]এখানে
Pardeep জৈন

2
@ ব্রোকো আপনার এবং মার্ক উভয়ই সঠিক। আশা করি আপনি বুঝতে পারবেন আমি কেবল একটি উত্তর বেছে নিতে পারি। :)
হংকবো মিয়াও

22

কেবলমাত্র [মান] এর পরিবর্তে [এনজিওলিউ] ব্যবহার করুন !!

export class Organisation {
  description: string;
  id: string;
  name: string;
}
export class ScheduleComponent implements OnInit {
  selectedOrg: Organisation;
  orgs: Organisation[] = [];

  constructor(private organisationService: OrganisationService) {}

  get selectedOrgMod() {
    return this.selectedOrg;
  }

  set selectedOrgMod(value) {
    this.selectedOrg = value;
  }
}


<div class="form-group">
      <label for="organisation">Organisation
      <select id="organisation" class="form-control" [(ngModel)]="selectedOrgMod" required>
        <option *ngFor="let org of orgs" [ngValue]="org">{{org.name}}</option>
      </select>
      </label>
</div>

1
এটি আমাকে সাহায্য করেছিল। আমার (change)="selectOrg(selectedOrg)"কেসটি কিছুটা আলাদা কিনা তা নিশ্চিত নয়, তবে আমার জন্য নতুন / নির্বাচিত বিকল্পটি নয়, বর্তমান / পূর্ববর্তী নির্বাচনের সাথে ফাংশনটি সিলেক্টআরগ কল করে। আমি বুঝতে পেরেছি, আমার (change)কিছুটা দরকার নেই ।
নিক

ভাল স্পটিং। হ্যাঁ পুরানো মডেলটি পাস করার (পরিবর্তন) এর সাথে এটি অদ্ভুত আচরণ। আমি ভেবেছিলাম এটি এনজি-চেঞ্জের মতো হবে সম্ভবত এটি কৌণিক 2 এ একটি বাগ। আমি get এবং সেট পদ্ধতি ব্যবহার করতে এটি আপডেট করেছি। সেটটি নির্বাচিত অর্গমড (মান) পদ্ধতিতে আমি জানতে পারি যে সংস্থাটি পরিবর্তন করেছে এবং আমার সাংগঠনিক দলগুলির তালিকা আপডেট করে।
রবার্ট কিং

12

Https://angular.io/docs/ts/latest/guide/forms.html এ কৌণিক 2 ফর্ম টিউটোরিয়াল (টাইপস্ক্রিপ্ট সংস্করণ) করার সময় আমি এই সমস্যায় পড়েছিলাম

নির্বাচন / বিকল্প ব্লক বিকল্পগুলির মধ্যে একটি নির্বাচন করে নির্বাচনের মান পরিবর্তন করার অনুমতি দিচ্ছিল না।

মার্ক রাজকক যা কাজ করেছিল তার কাজটি করা, যদিও আমি ভাবছিলাম যে আসল টিউটোরিয়ালটিতে আমি কোনও কিছু মিস করেছি বা যদি কোনও আপডেট আছে। যে কোনও ক্ষেত্রে, যোগ

onChange(newVal) {
    this.model.power = newVal;
}

হিরো-ফর্ম.কম্পোনেন্ট ক্লাসে নায়ক-ফর্ম

এবং

(change)="onChange($event.target.value)"

<select>উপাদানটিতে নায়ক- form.componal.html এ এটি কাজ করে


4

উপরের কৌণিক 6 এবং উপরের নির্বাচন নির্বাচন করুন। উদাহরণ (selectionChange)= onChange($event.value)


আমি প্রতিক্রিয়াশীল ফর্ম পদ্ধতির ব্যবহার করিনি .আমি কেবলমাত্র সেই একক মানের উপর ভিত্তি করে পরিষেবা কল ট্রিগার করতে নির্বাচিত মান প্রয়োজন .. উপরের পদ্ধতিটি আমাকে সহায়তা করেছে।
আনভারাস লামুরেপ

3

আরেকটি বিকল্প হ'ল স্ট্রিং হিসাবে অবজেক্টটি মান হিসাবে সঞ্চয় করা:

<select [ngModel]="selectedDevice | json" (ngModelChange)="onChange($event)">
    <option [value]="i | json" *ngFor="let i of devices">{{i}}</option>
</select>

উপাদান:

onChange(val) {
    this.selectedDevice = JSON.parse(val);
}

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


3
<mat-form-field>
<mat-select placeholder="Vacancies" [(ngModel)]="vacanciesSpinnerSelectedItem.code" (ngModelChange)="spinnerClick1($event)"
    [ngModelOptions]="{standalone: true}" required>
    <mat-option *ngFor="let spinnerValue of vacanciesSpinnerValues" [value]="spinnerValue?.code">{{spinnerValue.description}}</mat-option>
</mat-select>

আমি এটি কৌনিক উপাদান ড্রপডাউন জন্য ব্যবহার করেছি। ঠিকভাবে কাজ করে


1

সর্বশেষ আয়নিক 3.2.0 (আয়নচঞ্জ) থেকে পরিবর্তন (পরিবর্তন) করেছে

যেমন: এইচটিএমএল

<ion-select (ionChange)="function($event)"> <ion-option>1<ion-option>
</ion-select>

হিজড়া

function($event){
// this gives the selected element
 console.log($event);

}

1

কৌণিক 7/8

কৌণিক 6 অনুসারে, এনজিওমোডেল ইনপুট বৈশিষ্ট্যটির সাথে প্রতিক্রিয়াশীল ফর্মের নির্দেশাবলী ব্যবহার কৌনিক in+-তে অবমুক্ত এবং সম্পূর্ণ সরানো হয়েছে। অফিসিয়াল ডক এখানে পড়ুন।

প্রতিক্রিয়াশীল ফর্ম পদ্ধতির ব্যবহার করে আপনি নির্বাচিত ডেটা হিসাবে / সেট করতে পারেন;

      //in your template
 <select formControlName="person" (change)="onChange($event)"class="form-control">
    <option [value]="null" disabled>Choose person</option>
      <option *ngFor="let person of persons" [value]="person"> 
        {{person.name}}
    </option>
 </select> 


 //in your ts
 onChange($event) {
    let person = this.peopleForm.get("person").value
    console.log("selected person--->", person);
    // this.peopleForm.get("person").setValue(person.id);
  }

0

ইন কৌণিক 5 আমি নিম্নলিখিত পথ সঙ্গে করেনি। $ event.target.value এর পরিবর্তে অবজেক্ট $ ইভেন্ট.ভ্যালুটি পান

<mat-form-field color="warn">
   <mat-select (ngModelChange)="onChangeTown($event)" class="form-width" formControlName="branch" [(ngModel)]="branch" placeholder="Enter branch">
     <mat-option *ngFor="let branch of branchs" [value]="branch.value">
                  {{ branch.name }}
     </mat-option>
   </mat-select>
</mat-form-field>

onChangeTown(event): void {
  const selectedTown = event;
  console.log('selectedTown: ', selectedTown);
}

0

কৌণিক 8 এ আপনি কেবল "সিলেকশন চেঞ্জ" ব্যবহার করতে পারেন:

 <mat-select  [(value)]="selectedData" (selectionChange)="onChange()" >
  <mat-option *ngFor="let i of data" [value]="i.ItemID">
  {{i.ItemName}}
  </mat-option>
 </mat-select>
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.