হ্যাঁ, আপনি রাউটার আউটলেটগুলির মাধ্যমে প্রদর্শিত উপাদানগুলির ইনপুটগুলি সেট করতে পারেন । দুঃখের বিষয়, অন্যান্য উত্তর হিসাবে উল্লিখিত হিসাবে আপনি এটি প্রোগ্রামিয়ালি করতে হবে। পর্যবেক্ষকরা জড়িত থাকাকালীন (নীচে বর্ণিত) এর একটি বড় সতর্কতা রয়েছে।
এখানে কীভাবে:
(1)activate প্যারেন্ট টেম্পলেটে রাউটার-আউটলেট ইভেন্টটি সম্পর্কে জড়িত:
<router-outlet (activate)="onOutletLoaded($event)"></router-outlet>
(২) পিতামাতার টাইপ স্ক্রিপ্ট ফাইলে স্যুইচ করুন এবং প্রতিবার সক্রিয় হওয়ার সাথে সাথে শিশু উপাদানটির ইনপুটগুলি প্রোগ্রামিকভাবে সেট করুন:
onOutletLoaded(component) {
component.node = 'someValue';
}
সম্পন্ন.
তবে, উপরের সংস্করণটি onOutletLoadedপরিষ্কার করার জন্য সরল করা হয়েছে। এটি কেবলমাত্র তখনই কার্যকর হয় যদি আপনি সমস্ত সন্তানের উপাদানগুলিকে আপনার নির্ধারিত হুবহু ইনপুটগুলি নিশ্চিত করতে পারেন। আপনার যদি বিভিন্ন ইনপুট সহ উপাদানগুলি থাকে তবে প্রকার রক্ষকগুলি ব্যবহার করুন:
onChildLoaded(component: MyComponent1 | MyComponent2) {
if (component instanceof MyComponent1) {
component.someInput = 123;
} else if (component instanceof MyComponent2) {
component.anotherInput = 456;
}
}
পরিষেবা পদ্ধতির চেয়ে কেন এই পদ্ধতিটিকে প্রাধান্য দেওয়া যেতে পারে?
শিশু উপাদানগুলির সাথে যোগাযোগের জন্য এই পদ্ধতি বা পরিষেবা পদ্ধতি উভয়ই "সঠিক উপায়" নয় (উভয় পদ্ধতি খাঁটি টেমপ্লেট বাঁধাই থেকে দূরে সরে যায়), সুতরাং আপনাকে কেবল সিদ্ধান্ত নিতে হবে যে প্রকল্পের জন্য কোন উপায়ে আরও উপযুক্ত মনে হচ্ছে।
এই পদ্ধতিটি তবে "যোগাযোগের জন্য একটি পরিষেবা তৈরি করুন" পদ্ধতির (যেমন, পিতা-মাতার পরিষেবাটি প্রয়োজন, এবং বাচ্চাদের অন্য যে কোনও জায়গায় অকেজো হয়ে ওঠার জন্য বাচ্চাদের সকলের পরিষেবা প্রয়োজন) সম্পর্কিত সংযুক্ত কৃপণতা এড়ানো যায়। ডিকোপলিং সাধারণত পছন্দ হয়।
অনেক ক্ষেত্রে এই পদ্ধতিটি "কৌণিক উপায়ে" আরও কাছাকাছি অনুভূত হয় কারণ আপনি @ ইনপুটসের মাধ্যমে আপনার সন্তানের উপাদানগুলিতে ডেটা প্রেরণ চালিয়ে যেতে পারেন (ডিকোপলিং অংশটি - এটি অন্য কোথাও পুনরায় ব্যবহার সক্ষম করে)। এটি ইতিমধ্যে বিদ্যমান বা তৃতীয় পক্ষের উপাদানগুলির জন্যও বেশ উপযুক্ত যা আপনি চান না বা আপনার পরিষেবার সাথে শক্তভাবে দম্পতি করতে পারবেন না।
অন্যদিকে, কৌণিক উপায়ে কম মনে হতে পারে যখন ...
গুহা
এই পদ্ধতির সহিত সতর্কতাটি হ'ল যেহেতু আপনি টাইপ স্ক্রিপ্ট ফাইলটিতে ডেটা পাস করছেন, আপনার আর টেমপ্লেটগুলিতে ব্যবহৃত পাইপ-অ্যাসিঙ্ক প্যাটার্ন ব্যবহার করার বিকল্প নেই (উদাহরণস্বরূপ {{ myObservable$ | async }}) স্বয়ংক্রিয়ভাবে ব্যবহারযোগ্য এবং আপনার পর্যবেক্ষণযোগ্য ডেটা শিশু উপাদানগুলিতে প্রেরণ করতে।
পরিবর্তে, যখনই onChildLoaded ফাংশনটি ডাকা হবে তখন আপনাকে বর্তমান পর্যবেক্ষণযোগ্য মানগুলি পেতে কিছু সেট আপ করতে হবে । এটির জন্য প্যারেন্ট উপাদানগুলির onDestroyকার্যক্রমে সম্ভবত কিছু টিয়ারডাউন লাগবে । এটি খুব অস্বাভাবিক কিছু নয়, প্রায়শই এমন ঘটনা ঘটে থাকে যেখানে এমনটি করা প্রয়োজন যেমন একটি পর্যবেক্ষণযোগ্য ব্যবহার করার সময় এমনকি টেমপ্লেটেও পৌঁছায় না।
nodeএটিকে যেখানে টাইপ করেছি তার সমস্ত জায়গাগুলি পরিবর্তনের চেষ্টা করেছিstringএবং এটি কাজ করছে বলে মনে হচ্ছে না বা আমি কিছু ভুল করছি