8 এবং 9 কৌণিক মধ্যে 'উইন্ডো' বনাম উইন্ডো সরবরাহ এবং ইনজেকশনের মধ্যে পার্থক্য কী?


10

এই সংস্করণগুলি ব্যবহার করে আমার কাছে দুটি কৌণিক প্রকল্প রয়েছে:

  • 9.0.0-next.6
  • 8.1.0

9 সংস্করণে আমি এটি windowঅবজেক্টটি সরবরাহ এবং ইনজেক্ট করতে ব্যবহার করেছি:

@NgModule({
  providers: [
    {
      provide: Window,
      useValue: window
    },
  ]
})

export class TestComponent implements OnInit {
  constructor(@Inject(Window) private window: Window)
}

যা ভাল কাজ করে।


সংকলনের সময় 8 সংস্করণে নিক্ষেপ করা সতর্কতা এবং ত্রুটিগুলির এই পদ্ধতির দিকে নিয়ে যাওয়া:

সতর্কতা: টেস্টকম্পোনেন্টের জন্য সমস্ত পরামিতিগুলি সমাধান করতে পারে না ...

আমি একক উদ্ধৃতি ব্যবহার করে এটির সমাধান করেছি:

@NgModule({
  providers: [
    {
      provide: 'Window',
      useValue: window
    },
  ]
})

export class TestComponent implements OnInit {
  constructor(@Inject('Window') private window: Window)
}

উভয় সংস্করণ মধ্যে পার্থক্য কি?
কৌনিক 8 এবং 9 এর মধ্যে পার্থক্য কী এই জিনিসটির কারণ?


আমি খয়রাত সঙ্গে আশা করি আমি একটি উত্তর যা থেকে আমি এবং অন্যান্য শিখতে এবং ভাল কিভাবে বুঝতে পারেন পেতে পারেন প্রদানকারীর এবং দ্বি কৌণিক এবং ফ্রেমওয়ার্ক কার্যের বিভিন্ন সংস্করণে।
lampshade

উত্তর:


6

আপনার অ্যাপ্লিকেশনটিকে সার্ভার সাইড রেন্ডারিংয়ের সাথে কাজ করার জন্য আমি আপনাকে পরামর্শ দিচ্ছি যে টোকেনের মাধ্যমে উইন্ডোটিই কেবল ব্যবহার করবেন না, তবে বিন্দুমাত্র উল্লেখ ছাড়াই এসএসআর বান্ধব উপায়ে এই টোকেনটি তৈরি করুন window। কৌণিক DOCUMENTঅ্যাক্সেসের জন্য অন্তর্নির্মিত টোকেন রয়েছে document। আমার প্রকল্পগুলি windowটোকেনের মাধ্যমে ব্যবহার করার জন্য আমি এখানে কী নিয়ে এসেছি :

import {DOCUMENT} from '@angular/common';
import {inject, InjectionToken} from '@angular/core';

export const WINDOW = new InjectionToken<Window>(
    'An abstraction over global window object',
    {
        factory: () => {
            const {defaultView} = inject(DOCUMENT);

            if (!defaultView) {
                throw new Error('Window is not available');
            }

            return defaultView;
        },
    },
);

উত্তরের জন্য তোমাকে অনেক ধন্যবাদ. এটি খুব সহায়ক এবং আমি ভবিষ্যতে এর মতো একটি সমাধান ব্যবহার করতে যাচ্ছি।
lampshade

5

ValueProviderইন্টারফেস বিবেচনা :

export declare interface ValueProvider extends ValueSansProvider {
    /**
     * An injection token. Typically an instance of `Type` or `InjectionToken`, but can be `any`.
     */
    provide: any;
    /**
     * When true, injector returns an array of instances. This is useful to allow multiple
     * providers spread across many files to provide configuration information to a common token.
     */
    multi?: boolean;
}

provideসম্পত্তির প্রকার হল any। তার মানে যে কোনও অবজেক্ট ( Windowকনস্ট্রাক্টর অন্তর্ভুক্ত ) এর ভিতরে যেতে পারে। বস্তুটি আসলে কিছু যায় আসে না, কেবল কনস্ট্রাক্টরে কোনও প্যারামিটার ইনজেকশন দেওয়ার জন্য কোন সরবরাহকারীর ব্যবহার করা উচিত তা সনাক্ত করার জন্য কেবলমাত্র রেফারেন্সই গুরুত্বপূর্ণ।

দেশীয় Windowনির্মাণকারীকে ইনজেকশন টোকেন হিসাবে ব্যবহার করা ভাল অভ্যাস হিসাবে বিবেচনা করা উচিত নয় । এটি সংকলন সময়ে ব্যর্থ হয় কারণ Windowএকটি ব্রাউজার পরিবেশে রান সময়ে এটি উপস্থিত থাকে, এটি একটি টাইপস্ক্রিপ্ট হিসাবে উপস্থিত থাকে declareতবে কৌনিক 8 সংকলক Windowসরবরাহকারী এবং Windowকনস্ট্রাক্টরের প্যারামিটারগুলিতে পারস্পরিক সম্পর্ক স্থাপনের জন্য স্থির কোড বিশ্লেষণ করতে পারে না , যেহেতু অ্যাসাইনমেন্ট Windowসম্পন্ন হয় ব্রাউজার দ্বারা, কোড দ্বারা নয়। এটি কেন কৌণিক 9 এ কাজ করে তা নিশ্চিত নয়, যদিও ...

আপনার নিজের ইনজেকশন টোকেন তৈরি করা উচিত যা নির্ভরতা সরবরাহকারীর প্রতিনিধিত্ব করে। এই ইনজেকশন টোকেনটি হ'ল:

  • একটি উত্সর্গীকৃত স্ট্রিং (যেমন আপনি করেছেন 'Window')
  • একটি উত্সর্গীকৃত InjectionToken। উদাহরণ স্বরূপexport const window = new InjectionToken<Window>('window');

তদুপরি, কৌণিক কোডটি প্ল্যাটফর্ম অজোনস্টিক হওয়া উচিত (ব্রাউজারে এবং একটি নোড.জেএস সার্ভারেও কার্যকর হওয়া উচিত) সুতরাং কোনও ফ্যাক্টরি ব্যবহার করা ভাল যেটি ফিরে আসে windowবা undefined/ null, তারপরে উপাদানগুলিতে undefined/ কেসটি পরিচালনা করে null


1
আপনার বিস্তারিত উত্তরের জন্য আপনাকে অনেক ধন্যবাদ। এটি অনেক সাহায্য করেছে।
lampshade

1
খুব ভালো! ধন্যবাদ। আমি সবেমাত্র কৌণিক ডক্স পরীক্ষা করেছি (v8 এবং v9) এবং আমি এর কোন উদাহরণ পাইনি যেখানে তারা স্ট্রিং ব্যবহার করে। :( তাদের সত্যই
ডক্সে
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.