কৌণিক এনজিডমুলেলে প্রবেশের উপাদানগুলি কী?


131

আমি নির্ভর করে এমন একটি Ionicঅ্যাপ্লিকেশন ( 2.0.0-rc0) এ কাজ করছি angular 2। সুতরাং নতুন ভূমিকা ngModulesঅন্তর্ভুক্ত করা হয়। আমি আমার app.module.ts.নীচে যুক্ত করছি ।

import { NgModule } from '@angular/core';
import { IonicApp, IonicModule } from 'ionic-angular';
import { MyApp } from './app.component';
import { Users } from '../pages/users/users';

@NgModule({
  declarations: [
    MyApp,
    Users
  ],
  imports: [
    IonicModule.forRoot(MyApp)
  ],
  bootstrap: [IonicApp],
  entryComponents: [
    MyApp,
    Users
  ]
})
export class AppModule {}

entryComponentsএখানে কি করে ? Componentsইতিমধ্যে সংজ্ঞায়িত করা হয় declarations। তাহলে তাদের পুনরাবৃত্তি করার দরকার কী? আমি যদি এখানে কোনও উপাদান অন্তর্ভুক্ত না করি তবে কী হবে?


4
কৌণিক "ট্রি কাঁপুন" সক্ষম করার জন্য এন্ট্রি কম্পোনেন্ট ব্যবহার করে অর্থাত্ যে প্রকল্পগুলিতে প্রকৃতপক্ষে কেবল ব্যবহৃত উপাদানগুলিকে সংকলন করে যা বাস্তবে declaredথাকে ngModuleতবে কখনও ব্যবহৃত হয় না। angular.io/docs/ts/latest/cookbook/… এন্ট্রি কম্পোনেন্টস -
সমর

উত্তর:


155

এটি গতিশীল যুক্ত উপাদানগুলির জন্য যা ব্যবহার করে যুক্ত করা হয় ViewContainerRef.createComponent()। তাদের সংযুক্ত করতে entryComponentsএবং তাদের জন্য কারখানা তৈরি করতে অফলাইন টেম্পলেট সংকলককে বলে tells

রুট কনফিগারেশনে নিবন্ধিত উপাদানগুলি স্বয়ংক্রিয়ভাবে যুক্ত করা entryComponentsহয় কারণ router-outletএটি ViewContainerRef.createComponent()ডিওমে রাউন্ডযুক্ত উপাদানগুলি যুক্ত করতে ব্যবহৃত হয়।

অফলাইন টেম্পলেট সংকলক (ওটিসি) কেবলমাত্র এমন উপাদানগুলি তৈরি করে যা প্রকৃতপক্ষে ব্যবহৃত হয়। যদি টেমপ্লেটগুলিতে উপাদানগুলি সরাসরি ব্যবহার না করা হয় তবে ওটিসি জানতে পারে না যে তাদের সংকলন করা দরকার। এন্ট্রি উপাদানগুলির সাহায্যে আপনি ওটিসি কে এই উপাদানগুলি সংকলন করতে বলতে পারেন যাতে রানটাইম এ উপলব্ধ।

একটি প্রবেশের উপাদান কি? (Angular.io)

এনজিএমডিউল ডক্স (কৌণিক.ইও)

এই উপাদানটি সংজ্ঞায়িত করার সাথে সাথে কম্পাইল করা উচিত এমন উপাদানগুলি সংজ্ঞায়িত করে। এখানে তালিকাভুক্ত প্রতিটি উপাদানগুলির জন্য, কৌণিক একটি কম্পোনেন্টফ্যাক্টরি তৈরি করবে এবং এটি কম্পোনেন্টফ্যাক্ট্রি রিসোলভারে সঞ্চয় করবে।

আপনি যদি গতিশীলভাবে যুক্ত উপাদান তালিকাভুক্ত না করেন তবে আপনি entryComponentsএকটি ত্রুটি বার্তা পেয়ে যাবেন একটি অনুপস্থিত কারখানার জন্য কারণ অ্যাংুলার একটি তৈরি করবে না।

এছাড়াও https://angular.io/docs/ts/latest/cookbook/dynamic-comp घटक-loader.html দেখুন


12
খোলামেলাভাবে বললে, আমি এর 100% সঠিক উত্তর জানি কিন্তু আমার জন্য বাউন্সার হয়ে গেছে, আপনি কি আরও বিস্তারিত বলতে পারেন?
পঙ্কজ পার্কার

26
অস্পষ্ট কি তা বলা শক্ত। অফলাইন টেম্পলেট সংকলক (ওটিসি) কেবলমাত্র এমন উপাদানগুলি তৈরি করে যা প্রকৃতপক্ষে ব্যবহৃত হয়। যদি টেমপ্লেটগুলিতে উপাদানগুলি সরাসরি ব্যবহার না করা হয় তবে ওটিসি জানতে পারে না যে তাদের সংকলন করা দরকার। এর মাধ্যমে entryComponentsআপনি ওটিসি কে এই উপাদানগুলি সংকলন করতে বলতে পারেন যাতে রানটাইম এ তারা উপলব্ধ।
Gternter Zöchbauer

3
stackoverflow.com/questions/36325212/... যেমন একটি উদাহরণ হবে
গুন্টার Zöchbauer

2
সুতরাং সাধারণভাবে, যদি উপাদান declarationsএটিতে তালিকাভুক্ত করা হয় entryComponents, এছাড়াও তালিকাবদ্ধ করা উচিত , ডান?
omnomnom

1
কেবলমাত্র যদি createComponentআপনার কোডটিতে কোনও উপাদান গতিশীলভাবে যুক্ত করা হয় বা উদাহরণস্বরূপ রাউটার যা উপাদানগুলি যুক্ত করতে থোড এপিআই ব্যবহার করে।
গন্টার জ্যাচবাউয়ার

30

আপনি কৌণিক ডক্সের চেয়ে আরও ভাল ব্যাখ্যা পাবেন না: এন্ট্রি-উপাদান এবং এনজিএমডিউল-ফ্যাক্স

এবং নীচে কৌনিক ডক্স থেকে ব্যাখ্যা দেওয়া হল।

একটি এন্ট্রি উপাদান হ'ল এমন কোনও উপাদান যা কৌণিক প্রকারের দ্বারা জরুরীভাবে লোড করে।

এর উপাদান নির্বাচকের মাধ্যমে ঘোষিতভাবে লোড করা উপাদান কোনও প্রবেশিকার উপাদান নয়।

বেশিরভাগ অ্যাপ্লিকেশন উপাদানগুলি ঘোষণামূলকভাবে লোড হয়। কৌণিক টেম্পলেটের উপাদান সনাক্ত করতে উপাদানটির নির্বাচক ব্যবহার করে। এরপরে এটি উপাদানটির এইচটিএমএল উপস্থাপনা তৈরি করে এবং এটি নির্বাচিত উপাদানটিতে ডিওমে প্রবেশ করায়। এগুলি প্রবেশের উপাদান নয়।

কয়েকটি উপাদান কেবল গতিশীলভাবে লোড হয় এবং কোনও উপাদান টেমপ্লেটে কখনই রেফারেন্স হয় না।

বুটস্ট্র্যাপযুক্ত রুট AppComponentএকটি এন্ট্রি উপাদান। সত্য, এর নির্বাচক সূচক html এ একটি উপাদান ট্যাগের সাথে মেলে। তবে index.htmlকোনও উপাদান টেম্পলেট নয় এবং AppComponentনির্বাচক কোনও উপাদান টেম্পলেটগুলির সাথে কোনও উপাদানের সাথে মেলে না।

কৌণিকভাবে অ্যাপকোম্পোনেন্টগুলি গতিশীলভাবে লোড করে কারণ এটি হয় @NgModule.bootstrapমডিউলটির এনজিডো বুটস্ট্র্যাপ পদ্ধতিতে টাইপ করে তালিকাভুক্ত বা জরুরীভাবে বুস্ট্র্যাপড।

রুটের সংজ্ঞায়িত উপাদানগুলিও প্রবেশের উপাদান। একটি রুটের সংজ্ঞা তার উপাদান দ্বারা কোনও উপাদানকে বোঝায়। রাউটারটি একটি রাউড উপাদানগুলির নির্বাচককে উপেক্ষা করে (যদি এটির একটিও থাকে) এবং উপাদানটিকে গতিশীলভাবে একটি এ লোড করে RouterOutlet

সংকলকটি অন্যান্য উপাদান টেম্পলেটগুলিতে সন্ধান করে এই এন্ট্রি উপাদানগুলি আবিষ্কার করতে পারে না। তাদের অবশ্যই entryComponentsতালিকায় যুক্ত করে তাদের সম্পর্কে এটি অবশ্যই বলতে হবে ।

কৌণিক স্বয়ংক্রিয়ভাবে মডিউলটির মধ্যে নিম্নলিখিত ধরণের উপাদান যুক্ত করে entryComponents:

  • @NgModule.bootstrapতালিকার উপাদান
  • রাউটার কনফিগারেশনে উপাদানগুলি উল্লেখ করা হয়েছে।

আপনাকে এই উপাদানগুলি স্পষ্টভাবে উল্লেখ করার দরকার নেই, যদিও এটি করা নিরীহ।


এখনই কৌণিক ডক্স উপলভ্য নয়, সুতরাং এর জন্য ধন্যবাদ!
Caelum

এটি উল্লেখ করার মতো মনে হয় না যে রুট কনফিগারেশনের উপাদানগুলি স্বয়ংক্রিয়ভাবে এন্ট্রি উপাদানগুলিতে যুক্ত হয়ে গেছে (যাতে আপনার সাধারণত এটি সংজ্ঞায়িত করার প্রয়োজন হয় না)।
কনার

যদি আমরা একটি উপাদান একটি উপাদান হিসাবে ব্যবহার করার জন্য তৈরি EntryComponentকরি তবে আমাদের selectorবৈশিষ্ট্যটি মুছে ফেলা উচিত ? (যেহেতু এটি ব্যবহার করা হবে না)
রোনান

24

অন্যান্য উত্তরগুলি এতে উল্লেখ করে তবে মূল সারাংশটি হ'ল:

  • যখন এইচটিএমএল টেমপ্লেটের অভ্যন্তরে কোনও উপাদান ব্যবহার করা হয় না তখন এটি প্রয়োজন <my-component />
  • উদাহরণস্বরূপ কৌণিক উপাদান ডায়ালগ উপাদান ব্যবহার করার সময় আপনি উপাদানটি অপ্রত্যক্ষভাবে ব্যবহার করেন।

ম্যাটেরিয়াল ডায়ালগ উপাদানগুলি টিএস কোডের মধ্যে তৈরি করা হয়, টেমপ্লেটটি নয়:

    const dialogRef = this.dialog.open(MyExampleDialog, { width: '250px' });
  }

এটি আপনাকে এন্ট্রি কম্পোনেন্ট হিসাবে নিবন্ধিত করা প্রয়োজন:

  • entryComponents: [MyExampleDialog]

অন্যথায় আপনি একটি ত্রুটি পান:

  • ERROR Error: No component factory found for MyExampleDialog. Did you add it to @NgModule.entryComponents?

2
এখানে সেরা ব্যাখ্যা।
nop

3

এন্ট্রি কম্পোনেন্টস অ্যারে কেবলমাত্র এমন উপাদানগুলি সংজ্ঞায়িত করতে ব্যবহৃত হয় যা এইচটিএমএলে পাওয়া যায় না এবং গতিশীলভাবে তৈরি করা হয়। কৌণিকের এন্ট্রি উপাদান খুঁজে পেতে এবং তাদের সংকলন করার জন্য এই ইঙ্গিতটির প্রয়োজন।

এন্ট্রি উপাদান দুটি প্রধান ধরণের আছে:

  • বুটস্ট্র্যাপযুক্ত মূল উপাদান।
  • কোনও রুট সংজ্ঞাতে আপনি নির্দিষ্ট করেছেন এমন উপাদান।

এন্ট্রি উপাদানগুলির আরও বিশদ তথ্যের জন্য দয়া করে কৌণিক.ইও https://angular.io/guide/entry-comp घटक দেখুন


1

ব্যাকগ্রাউন্ড সম্পর্কে একটি বিট entryComponent

entryComponentকৌণিক লোড অপরিহার্যভাবে কোনও উপাদান। আপনি entryComponentএটি NgModuleবা রুটের সংজ্ঞাগুলিতে বুটস্ট্র্যাপ করে ঘোষণা করতে পারেন ।

@NgModule({
  declarations: [
    AppComponent
  ],
  imports: [
    BrowserModule,
    FormsModule,
    HttpClientModule,
    AppRoutingModule
  ],
  providers: [],
  bootstrap: [AppComponent] // bootstrapped entry component
})

ডকুমেন্টেশন নীচে বলে

দুটি ধরণের উপাদানগুলির বিপরীতে, এমন উপাদান রয়েছে যা টেম্পলেটটিতে অন্তর্ভুক্ত রয়েছে, যা ঘোষণামূলক। অতিরিক্তভাবে, এমন উপাদান রয়েছে যা আপনি অপরিহার্যভাবে লোড করেন; এটি হল, প্রবেশের উপাদানগুলি।

এখন সম্পর্কে আপনার নির্দিষ্ট প্রশ্নের উত্তর দিতে entryComponents

নেই entryComponentsঅ্যারের @NgModuleফাইল। entryComponentsউপাদানগুলি বুটস্ট্র্যাপ ব্যবহার করে যুক্ত করতে আপনি এটি ব্যবহার করতে পারেন ViewContainerRef.createComponent()

এটি আপনি বুটস্ট্র্যাপিং বা টেমপ্লেটে নয় বরং গতিশীল উপাদান তৈরি করছেন।

const componentFactory = this.componentFactoryResolver.resolveComponentFactory(myComp.component);
const viewContainerRef = this.compHost.viewContainerRef;
viewContainerRef.clear();
const componentRef = viewContainerRef.createComponent(componentFactory);

0

অ্যাঙ্গুলার 9 অনুসারে entryComponents আইভির এই বৈশিষ্ট্যটিকে অবমূল্যায়ন করার অনুমতি দেওয়ার জন্য ধন্যবাদ আর দরকার নেই এবং তাই মডিউল ঘোষণা থেকে সরানো যেতে পারে।

অবহেলিত এপিআই এবং বৈশিষ্ট্য - entryComponentsএবং ANALYZE_FOR_ENTRY_COMPONENTSআর প্রয়োজন নেই

পূর্বে, সংজ্ঞায়িত entryComponentsঅ্যারের NgModuleসংকলকটি বলার জন্য ব্যবহৃত হত কোন উপাদানগুলি তৈরি করা হবে এবং গতিশীলভাবে sertedোকানো হবে। আইভির সাথে, এটি আর প্রয়োজন হয় না এবং entryComponentsঅ্যারে বিদ্যমান মডিউল ঘোষণা থেকে সরানো যেতে পারে। একই ANALYZE_FOR_ENTRY_COMPONENTSইনজেকশন টোকেন প্রযোজ্য ।

কৌণিক আইভি

আইভির অ্যাংুলারের পরবর্তী প্রজন্মের সংকলন এবং রেন্ডারিং পাইপলাইনের কোড নাম। অ্যাঙ্গুলারের 9 সংস্করণ প্রকাশের সাথে, পুরানো সংকলক এবং রানটাইমের পরিবর্তে নতুন সংকলক এবং রানটাইম নির্দেশিকা ডিফল্টরূপে ব্যবহৃত হয়, ভিউ ইঞ্জিন হিসাবে পরিচিত।

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