angular - বৈশিষ্ট্য মডিউল শ্রেণিবিন্যাসের মধ্যে.for রুট() কীভাবে ব্যবহার করবেন




angular-material2 (2)

যে কেউ দয়া করে আমাকে স্পষ্ট করে বলতে পারেন যে আমি কীভাবে .forRoot () কলগুলির সাথে একাধিক নেস্টেড বৈশিষ্ট্য মডিউল কাঠামো গঠন করব?

উদাহরণস্বরূপ, যদি আমার এর মতো মডিউল থাকে:

- MainModule
- SharedModule
- FeatureModuleA
    - FeatureModuleA1
    - FeatureModuleA2
- FeatureModuleB

সমস্ত বৈশিষ্ট্য মডিউলগুলিতে একটি .forRoot () স্ট্যাটিক ফাংশন রয়েছে।

রুট () ফাংশনগুলির জন্য কোনওভাবে "স্থানান্তর" দিয়ে আমি ফিচারমডিউলএ কীভাবে সংজ্ঞায়িত করব ?

@NgModule({ 
  imports: [
    //- I can use .forRoot() calls here but this module not the root module
    //- I don't need to import sub-modules here, FeatureA only a wrapper
    //FeatureModuleA1.forRoot(), //WRONG!
    //FeatureModuleA2.forRoot(), //WRONG!
  ],
  exports: [
    //I cannot use .forRoot() calls here
    FeatureModuleA1, 
    FeatureModuleA2 
  ]
})
class FeatureModuleA {
  static forRoot(): ModuleWithProviders {
    return {
      //At this point I can set any other class than FeatureModuleA for root
      //So lets create a FeatureRootModuleA class: see below!
      ngModule: FeatureModuleA //should be: FeatureRootModuleA 
    };
  }
}

আমি মূল ব্যবহারের জন্য অন্য শ্রেণি তৈরি করতে পারি তারপরে এটি ফিচারমডিউলএর ফর্ম () ফাংশনের মধ্যে সেট করতে পারি:

@NgModule({
  imports: [
    //Still don't need any sub module within this feature module
  ]
  exports: [
    //Still cannot use .forRoot() calls but still need to export them for root module too:
    FeatureModuleA1, 
    FeatureModuleA2 
  ]
})
class FeatureRootModuleA { }

তবে আমি কীভাবে এই "বিশেষ স্থানান্তর" করতে পারি? রুট () এই বিশেষ মডিউলক্লাসের মধ্যে কল করতে পারি?

আমি দেখতে পাচ্ছি যে আমার সমস্ত উপ-মডিউলগুলি সরাসরি আমার মূল মেনডুলেলে আমদানি করতে হবে এবং প্রত্যেকটির জন্য। রুট () কল করতে হবে:

@NgModule({
  imports: [
    FeatureModuleA1.forRoot(),
    FeatureModuleA2.forRoot(),
    FeatureModuleA.forRoot(),
    SharedModule.forRoot()
  ]
})
class MainModule { }

আমি কি সঠিক? উত্তর দেওয়ার আগে দয়া করে এই ফাইলটি দেখুন: https://github.com/angular/material2/blob/master/src/lib/module.ts

আমি জানি এই রেপো অফিশিয়াল কৌণিক দল দ্বারা রক্ষণাবেক্ষণ করা হয়। সুতরাং তারা কেবলমাত্র একটি বিশেষ ম্যাটারিয়াল રૂটমডিউল মডিউলটির মধ্যে সমস্ত .forRoot () কলগুলি আমদানি করে উপরের সমাধান করে। আমি কী বুঝতে পারি না যে এটি আমার নিজস্ব রুট মডিউলটির জন্য কীভাবে প্রয়োগ করা হবে? এখানে মূল এবং .for রুট এর অর্থ কী? এটি কি প্যাকেজের সাথে সম্পর্কিত এবং প্রকৃত ওয়েব প্রকল্পের সাথে নয়?


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

সিঙ্গেলটন হিসাবে কোনও সরবরাহকারীর নিবন্ধকরণের একটি নতুন উপায় রয়েছে ular কোনও পরিষেবার জন্য @ ইনজেক্টেবল () ডিকোয়টারের ভিতরে, সরবরাহিত ইনট্রিবিউটটি ব্যবহার করুন। এর মানটিকে 'রুট' এ সেট করুন। তারপরে আপনাকে এটিকে মূল মডিউলটির সরবরাহকারীদের তালিকায় যুক্ত করার প্রয়োজন হবে না, অথবা এই ক্ষেত্রে আপনি এটি আপনার SharedModule এ এভাবে সেট করতে পারেন:

@Injectable({
  providedIn: SharedModule // or 'root' for singleton
})
export class AuthService {
...

সাধারণত forRoot অ্যাপ্লিকেশন / forRoot পরিষেবা যুক্ত করতে ব্যবহৃত হয়।

@NgModule({
  providers: [ /* DONT ADD HERE */ ]
})
class SharedModule {
  static forRoot() {
    return {
      ngModule: SharedModule,
      providers: [ AuthService ]
    }
  }
}

যুক্তিটি হ'ল আপনি যদি AuthService যুক্ত করেন তবে আপনি যদি SharedModule অন্য মডিউলগুলিতে আমদানি করেন তবে একের বেশি তৈরি করা সম্ভব।

আমি যখন SharedModule আগ্রহের সাথে বোঝা মডিউলটিতে আমদানি করা হয় তখন পরিষেবাটি তৈরি করা হবে কিনা সে সম্পর্কে আমি 100% পরিষ্কার নই, তবে উল্লিখিত SharedModule অলসভাবে বোঝা মডিউলগুলির ক্ষেত্রে ছিল। আপনি যখন অলসভাবে একটি মডিউল লোড করবেন তখন সমস্ত সরবরাহকারী তৈরি হয়ে যাবে।

এই কারণে, আমরা forRoot পদ্ধতির জন্য একটি (কনভেনশন দ্বারা) যুক্ত forRoot যে তা বোঝাতে যে পদ্ধতিটি কেবলমাত্র রুট (অ্যাপ) মডিউলটির জন্য ডাকা উচিত, অন্য মডিউলের জন্য এটি কেবলমাত্র সাধারণত আমদানি করা উচিত

@NgModule({
  imports: [SharedModule]
})
class FeatureModule {}

@NgModule({
  imports: [SharedModule.forRoot()]
})
class AppModule {}