ইভেন্টএমিটার কৌণিক 2 তে 2 পরামিতি কীভাবে পাস হয়


92

আমার একটি উপাদান রয়েছে EventEmitterতবে আমি এটি সংকলন করতে পারছি না কারণ এটি ত্রুটিটি ফিরিয়ে দেয়: Supplied parameters do not match any signature of call target

আমার উপাদান:

@Output() addModel = new EventEmitter<any>();

saveModel($event, make, name) {
    this.addModel.emit(make, name);
}

যদি আমি এর কোনও পরামিতি মুছে ফেলি this.addModel.emit()তবে এটি: তবে আমি eventEmitterকীভাবে 2 পরামিতিগুলি পাস করতে পারি ?

আমি এর সাথে চেষ্টাও করেছি:

@Output() addModel = new EventEmitter<any,any>();

কিন্তু এটি কাজ করে না।

উত্তর:


181

আপনি যদি EventEmitterএপিআই-এর emitপদ্ধতিটি দেখেন তবে এটি কেবলমাত্র একক প্যারামিটারের টাইপ নিতে পারেT

নির্গত (মান ?: টি)

যেহেতু কেবলমাত্র একক প্যারামিটারের অনুমতি রয়েছে, objectএমিট পদ্ধতিতে প্যারামিটারটি পাস করার বিষয়টি বিবেচনা করুন । একইভাবে নীচের পদ্ধতিতে makeএবং nameভেরিয়েবলগুলি তাদের নিজ নিজ মান ধরে রাখে।

this.addModel.emit({make: make, name: name});
//shorthand is below
this.addModel.emit({make, name});

4
ঠিক আছে, ওহ, আপনাকে ধন্যবাদ! এটি এটি.এডিডি মডেল.ইমিট করবে ({মেক: মেক, নাম: নাম});
LorenzoBerti

4
@ ইকোনাক্সকে এটি করার দরকার নেই, এস
পঙ্কজ পার্কার 'ই

প্যারেন্ট উপাদানগুলিতে আমি এই মানটি কীভাবে পর্যবেক্ষণ / গ্রহণ করতে পারি?
রোশিনি

@ অরশিনী দয়া করে উপাদান উপাদানগুলি কীভাবে সংঘটিত হয় তা একবার দেখুন, মূলত আপনাকে EventEmitterঅবজেক্টটি ব্যবহার করে সন্তানের উপাদান থেকে প্যারেন্ট উপাদানগুলিতে ডেটা নির্গমন করতে হবে ..
পঙ্কজ পার্কার

আপনার প্রতিক্রিয়ার জন্য ধন্যবাদ, আমি উপাদানগুলির মধ্যে এই ইমিটারটি জানি তবে দিকনির্দেশনা থেকে উপাদানগুলিতে তথ্য প্রেরণ হিসাবে ইন্টারঅ্যাকশন প্রয়োজন ...
রোশিনী

41

দৃ strongly়ভাবে এটি টাইপ করার জন্য আরও একটি বিকল্প নিম্নরূপ:

@Output addModel = new EventEmitter<{make: string, name: string}>();

তারপরে আপনি এটি @ পঙ্কজ-পার্কার শোয়ের মতো নির্গত করতে পারেন

this.addModel.emit({make, name});
বা
this.addModel.emit({make: 'honda', name: 'civic'});

আপনার এখন objectবা ব্যবহারের পরিবর্তে শক্ত টাইপিং রয়েছে any


22

আমি এটা তৈরি করে ঠিক করেছি

EventEmitter<object>();

তারপরে আমি কোনও বস্তু যেমন পাস করতে সক্ষম হয়েছি:

this.MyOutputVariable.emit({ name: 'jack', age: '12' });

এবং এটা কাজ করে.


4
এটা দুর্দান্ত, আদম আপনার উত্তরের বিরুদ্ধে কিছুই নয়, তবে এটি লক্ষণীয় যে একটি মানক অনুশীলন - এবং একটি ভাল অনুশীলন হ'ল সর্বদা 1 বা ততোধিক মান সহ কোনও ইভেন্ট অবজেক্ট সরবরাহ করা : publish(event, value)& subscribe(e, value) {...}। আমি কিছুটা অবাক হয়েছি যে অ্যাংুলার তাদের ইন্টারফেসটি সংজ্ঞায়িত করেছে / এভাবে তারা কার্যকর করেছিল।
কোডি

4
জোরালো ধরণের সমাধানের পক্ষে new EventEmitter<{name: string, age: number}>();
হ্রাস

4

আমি জানি এটি আমার জন্য একটি পুরানো প্রশ্ন আমি একটি ইন্টারফেস তৈরি করব এবং এটি এমন একটি বিষয় হিসাবে প্রেরণ করব যেখানে আমার কোডটি আরও সুসংহত করতে পারি

 export interface addModelArgs{
      make:string,
      name:string
    }
@Output() addModel = new EventEmitter<addModelArgs>();

এবং নিম্নলিখিত হিসাবে এটি কল

    this.addModel.emit({make: 'honda', name: 'civic'});
or 
    let savParamters:addModelArgs={make: 'honda', name: 'civic'};

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