আমি কৌণিকটি বোঝার চেষ্টা করছি (কখনও কখনও Angular2 + নামে পরিচিত), তারপরে আমি এসে পৌঁছেছি @Module
:
আমদানি
ঘোষণা
প্রোভাইডার
কৌনিক দ্রুত শুরু অনুসরণ করা
আমি কৌণিকটি বোঝার চেষ্টা করছি (কখনও কখনও Angular2 + নামে পরিচিত), তারপরে আমি এসে পৌঁছেছি @Module
:
আমদানি
ঘোষণা
প্রোভাইডার
কৌনিক দ্রুত শুরু অনুসরণ করা
উত্তর:
কৌণিক ধারণা
imports
অন্যান্য মডিউলগুলির রফতানি ঘোষণাগুলি বর্তমান মডিউলে উপলব্ধ করেdeclarations
হ'ল বর্তমান মডিউল থেকে অন্যান্য মডিউলে অন্য নির্দেশকের জন্য উপলব্ধ মডিউল থেকে নির্দেশাবলী (উপাদান এবং পাইপ সহ) তৈরি করা। নির্দেশাবলী, উপাদান বা পাইপগুলির নির্বাচকগুলি কেবলমাত্র ঘোষিত বা আমদানি করা হলে এইচটিএমএলের বিপরীতে মিলে যায়।providers
ডিআই (নির্ভরতা ইনজেকশন) এর কাছে পরিচিত পরিষেবাগুলি এবং মানগুলি তৈরি করা হয়। এগুলি মূল স্কোপে যুক্ত হয় এবং এগুলি অন্যান্য পরিষেবাগুলিতে বা নির্দেশে ইনজেকশনের সাথে যুক্ত হয় যা তাদের নির্ভরতা হিসাবে রয়েছে।এর জন্য একটি বিশেষ ক্ষেত্রে providers
হ'ল অলস বোঝাই মডিউলগুলি যা তাদের নিজস্ব শিশুকে ইনজেক্টর দেয়। providers
একটি অলস লোড মডিউল কেবল ডিফল্টরূপে এই অলস লোডযুক্ত মডিউলকে সরবরাহ করা হয় (অন্যান্য মডিউলগুলির সাথে পুরো অ্যাপ্লিকেশনটি নয়)।
মডিউলগুলি সম্পর্কে আরও বিশদ জানতে https://angular.io/docs/ts/latest/guide/ngmodule.html দেখুন
exports
উপাদানগুলি, নির্দেশিকা এবং পাইপগুলিকে মডিউলগুলিতে উপলব্ধ করে যা এই মডিউলটিকে যুক্ত করে imports
। exports
কমনমনোডিয়াল এবং ফর্মস মডুলির মতো মডিউলগুলি পুনরায় রফতানি করতেও ব্যবহার করা যেতে পারে যা প্রায়শই ভাগ করা মডিউলগুলিতে করা হয়।
entryComponents
অফলাইন সংকলনের জন্য উপাদানগুলি নিবন্ধভুক্ত করে যাতে সেগুলি ব্যবহার করা যায় ViewContainerRef.createComponent()
। রাউটার কনফিগারেশনে ব্যবহৃত উপাদানগুলি অন্তর্নিহিতভাবে যুক্ত করা হয়েছে।
টাইপস্ক্রিপ্ট (ES2015) আমদানি করে
import ... from 'foo/bar'
(যা কোনওটির সমাধান হতে পারেindex.ts
) টাইপস্ক্রিপ্ট আমদানির জন্য। আপনি যখনই অন্য টাইপ স্ক্রিপ্ট ফাইলে ঘোষিত টাইপস্ক্রিপ্ট ফাইলে একটি সনাক্তকারী ব্যবহার করেন তখন এগুলি আপনার দরকার।
কৌণিক এর @NgModule()
imports
এবং টাইপ করা বিষয় import
হয় সম্পূর্ণরূপে পৃথক ধারণা ।
JDriven - টাইপস্ক্রিপ্ট এবং ES6 আমদানি বাক্য গঠনও দেখুন
তাদের বেশিরভাগ হ'ল প্রকৃত ECMAScript 2015 (ES6) মডিউল সিনট্যাক্স যা টাইপস্ক্রিপ্ট পাশাপাশি ব্যবহার করে।
import
একটি জেএস (ES2015) কার্যকারিতা, কোনও টাইপস্ক্রিপ্ট নয় । :)
imports
তবে এর সাথে আপনার ডিক্লেয়ারেবলগুলি (উপাদান, নির্দেশিকা, পাইপ) রফতানি করুন exports
। সুতরাং, প্রধান লক্ষ্যগুলি imports
এবং exports
বিভিন্ন জিনিস। পরিবর্তে, এর প্রধান লক্ষ্য exports
আপনার declarations
। আপনি নিজের উপাদানটি ঘোষনা করেছেন declarations
তবে গতিশীল লোড উপাদানগুলির জন্য আপনাকে এগুলি রাখা দরকার entryComponents
। ইতিমধ্যে, providers
ডিআই দ্বারা অন্য গল্পে পরিচালিত হয়।
imports
ফর্মস মোডুল, রাউটারমডুল, কমনমডুল বা অন্য কোনও কাস্টম-মেড বৈশিষ্ট্য মডিউল যেমন সমর্থনকারী মডিউলগুলি আমদানি করতে ব্যবহৃত হয়।
declarations
বর্তমান মডিউলটির অন্তর্ভুক্ত উপাদান, নির্দেশাবলী, পাইপগুলি ঘোষনা করতে ব্যবহৃত হয়। ঘোষণার অভ্যন্তরের প্রত্যেকে একে অপরকে চেনে। উদাহরণস্বরূপ, যদি আমাদের কোনও উপাদান থাকে তবে ব্যবহারকারীর নাম বলুন, যা ব্যবহারকারীর নামগুলির একটি তালিকা প্রদর্শন করে এবং আমাদের কাছে একটি পাইপও রয়েছে, বলে টুপারপাইপ, যা একটি স্ট্রিংকে একটি বড় অক্ষরের স্ট্রিংয়ে রূপান্তর করে। এখন আমরা যদি আমাদের ইউজারনেম কম্পোনেন্টে বড় হাতের অক্ষরে ইউজারনেমগুলি দেখাতে চাই তবে আমরা আগে তৈরি হওয়া টাপারপাইপটি ব্যবহার করতে পারি তবে প্রশ্নটি কীভাবে ইউজারনেম কম্পোনেন্ট জানে যে টুপারপাইপটি বিদ্যমান এবং এটি কীভাবে এটি অ্যাক্সেস করতে এবং ব্যবহার করতে পারে। এখানে ঘোষণাগুলি আসুন, আমরা ইউজারনেম কম্পোনেন্ট এবং টাপারপাইপ ঘোষণা করতে পারি।
Providers
মডিউলটিতে উপাদান, নির্দেশিকা, পাইপ দ্বারা প্রয়োজনীয় পরিষেবাগুলি ইনজেকশনের জন্য ব্যবহৃত হয়।
উপাদানগুলি ঘোষিত হয়, মডিউলগুলি আমদানি করা হয়, এবং পরিষেবাগুলি সরবরাহ করা হয়। একটি উদাহরণ যার সাথে আমি কাজ করছি:
import { BrowserModule } from '@angular/platform-browser';
import { NgModule } from '@angular/core';
import { AppComponent } from './app.component';
import {FormsModule} from '@angular/forms';
import { UserComponent } from './components/user/user.component';
import { StateService } from './services/state.service';
@NgModule({
declarations: [
AppComponent,
UserComponent
],
imports: [
BrowserModule,
FormsModule
],
providers: [ StateService ],
bootstrap: [ AppComponent ]
})
export class AppModule { }
@NgModule
গঠন:import { x } from 'y';
: ES2015/ES6
অন্যান্য ফাইল থেকে কোড আমদানির জন্য এটি স্ট্যান্ডার্ড টাইপস্ক্রিপ্ট সিনট্যাক্স ( মডিউল সিনট্যাক্স)। এটি কৌনিক নির্দিষ্ট নয় । এছাড়াও এটি প্রযুক্তিগতভাবে মডিউলটির অংশ নয়, এই ফাইলটির ক্ষেত্রের মধ্যে প্রয়োজনীয় কোডটি পাওয়া কেবল প্রয়োজনীয়।imports: [FormsModule]
: আপনি এখানে অন্যান্য মডিউল আমদানি করুন। উদাহরণস্বরূপ আমরা FormsModule
নীচের উদাহরণে আমদানি করি । এখন আমরা ফর্মসমোডুলের এই মডিউল জুড়ে যে কার্যকারিতা সরবরাহ করতে হবে তা ব্যবহার করতে পারি।declarations: [OnlineHeaderComponent, ReCaptcha2Directive]
: আপনি এখানে আপনার উপাদান, নির্দেশিকা এবং পাইপ রেখেছেন। একবার এখানে ঘোষিত আপনি এখন পুরো মডিউল জুড়ে এটি ব্যবহার করতে পারেন। উদাহরণস্বরূপ আমরা এখন ব্যবহার করতে পারেন OnlineHeaderComponent
মধ্যে AppComponent
দৃশ্য (HTML ফাইল)। কৌণিক জানে কোথায় OnlineHeaderComponent
এটি পাওয়া যায় কারণ এটি এর মধ্যে ঘোষণা করা হয়েছে @NgModule
।providers: [RegisterService]
: এখানে এই নির্দিষ্ট মডিউলটির আমাদের পরিষেবাগুলি সংজ্ঞায়িত করা হয়েছে। আপনি নির্ভরতা ইনজেকশন দিয়ে ইনজেকশন দিয়ে আপনার উপাদানগুলিতে পরিষেবাগুলি ব্যবহার করতে পারেন।// Angular
import { BrowserModule } from '@angular/platform-browser';
import { NgModule } from '@angular/core';
import { FormsModule } from '@angular/forms';
// Components
import { AppComponent } from './app.component';
import { OfflineHeaderComponent } from './offline/offline-header/offline-header.component';
import { OnlineHeaderComponent } from './online/online-header/online-header.component';
// Services
import { RegisterService } from './services/register.service';
// Directives
import { ReCaptcha2Directive } from './directives/re-captcha2.directive';
@NgModule({
declarations: [
OfflineHeaderComponent,,
OnlineHeaderComponent,
ReCaptcha2Directive,
AppComponent
],
imports: [
BrowserModule,
FormsModule,
],
providers: [
RegisterService,
],
entryComponents: [
ChangePasswordComponent,
TestamentComponent,
FriendsListComponent,
TravelConfirmComponent
],
bootstrap: [AppComponent]
})
export class AppModule { }
একটি দ্রুত ঠকানো শীট যুক্ত করা যা কৌণিকের সাথে দীর্ঘ বিরতির পরে সহায়তা করতে পারে:
উদাহরণ:
declarations: [AppComponent]
আমরা এখানে কি ইনজেকশন করতে পারি? উপাদান, পাইপ, নির্দেশিকা
উদাহরণ:
imports: [BrowserModule, AppRoutingModule]
আমরা এখানে কি ইনজেকশন করতে পারি? অন্যান্য মডিউল
উদাহরণ:
providers: [UserService]
আমরা এখানে কি ইনজেকশন করতে পারি? সেবা
উদাহরণ:
bootstrap: [AppComponent]
আমরা এখানে কি ইনজেকশন করতে পারি? মূল উপাদান যা এই মডিউল দ্বারা উত্পাদিত হবে (একটি উপাদান গাছের জন্য শীর্ষ পিতামূলক নোড)
উদাহরণ:
entryComponents: [PopupComponent]
আমরা এখানে কি ইনজেকশন করতে পারি? গতিশীলভাবে উত্পন্ন উপাদানগুলি (উদাহরণস্বরূপ ভিউকন্টেইনারআরফ.ক্রিয়েট কম্পোনেন্ট () ব্যবহার করে)
উদাহরণ:
export: [TextDirective, PopupComponent, BrowserModule]
আমরা এখানে কি ইনজেকশন করতে পারি? উপাদানগুলি, নির্দেশাবলী, মডিউলগুলি বা পাইপগুলিতে আমরা অন্য মডিউলে তাদের অ্যাক্সেস দেখতে চাই (এই মডিউলটি আমদানির পরে)
forRoot()
একটি অলস-বোঝা মডিউল ব্যবহারের পরিবর্তে অ্যাপ-ওয়াইড সরবরাহকারীগুলিকে একটি কোর মড্যুলেলে রাখার । তুমি কি একমত? দেখুন কোর মডিউল । মূলের জন্য # ভাগ করা-মডিউল-এর লিঙ্কটি আর বিদ্যমান নেই।