Angular'ı (bazen Angular2 + olarak adlandırılır) anlamaya çalışıyorum, sonra karşılaştım @Module
:
ithalat
Beyannameler
Sağlayıcıları
Açısal Hızlı Başlat'ı Takip Etme
Angular'ı (bazen Angular2 + olarak adlandırılır) anlamaya çalışıyorum, sonra karşılaştım @Module
:
ithalat
Beyannameler
Sağlayıcıları
Açısal Hızlı Başlat'ı Takip Etme
Yanıtlar:
Açısal Kavramlar
imports
diğer modüllerin dışa aktarılan bildirimlerini geçerli modülde kullanılabilir hale getirirdeclarations
geçerli modülün yönergelerini (bileşenler ve borular dahil) geçerli modülün diğer yönergelerine sunmasını sağlamaktır. Direktiflerin, bileşenlerin veya kanalların seçicileri HTML ile yalnızca bildirilir veya içe aktarılırsa eşleştirilir.providers
DI (bağımlılık enjeksiyonu) tarafından bilinen hizmetler ve değerler yapmaktır. Kök kapsamına eklenirler ve bağımlılıkları olan diğer hizmetlere veya direktiflere enjekte edilirler.Özel bir durum providers
, kendi çocuk enjektörlerini alan tembel yüklü modüllerdir. providers
Tembel yüklü bir modülün varsayılan olarak bu tembel yüklü modüle varsayılan olarak sağlanır (diğer modüllerde olduğu gibi tüm uygulama değil).
Modüller hakkında daha fazla bilgi için ayrıca bkz. Https://angular.io/docs/ts/latest/guide/ngmodule.html
exports
bileşenleri, yönergeleri ve boruları bu modülü ekleyen modüllerde kullanılabilir hale getirir imports
. exports
genellikle paylaşılan modüllerde yapılan CommonModule ve FormsModule gibi modüllerin yeniden dışa aktarılması için de kullanılabilir.
entryComponents
ile birlikte kullanılabilmeleri için bileşenleri çevrimdışı derleme için kaydeder ViewContainerRef.createComponent()
. Yönlendirici yapılandırmalarında kullanılan bileşenler örtülü olarak eklenir.
TypeScript (ES2015) içe aktarma
import ... from 'foo/bar'
( çözümlenebilir birindex.ts
) TypeScript içe aktarma içindir. Başka bir daktilo dosyasında bildirilen bir daktilo dosyasında bir tanımlayıcı kullandığınızda bunlara ihtiyacınız vardır.
Açısal en @NgModule()
imports
ve typescript import
olan tamamen farklı kavramlar .
Ayrıca bkz. JDriven - TypeScript ve ES6 içe aktarma sözdizimi
Çoğu, TypeScript'in kullandığı düz ECMAScript 2015 (ES6) modülü sözdizimidir.
import
JS (ES2015) işlevselliği olduğu değil daktilo biri. :)
imports
, ancak beyanlarınızı (bileşen, yönerge, boru) ile dışa aktarmanız gerekir exports
. Yani, ana hedefler imports
ve exports
farklı şeyler. Bunun yerine, ana hedefi exports
sizin declarations
. Bileşeninizi şu şekilde beyan edersiniz declarations
, ancak dinamik yüklü bileşen için bunları koymanız gerekir entryComponents
. Bu arada, providers
DI tarafından başka bir hikayede yönetiliyor.
imports
FormsModule, RouterModule, CommonModule veya herhangi bir özel yapım özellik modülü gibi destek modüllerini içe aktarmak için kullanılır.
declarations
geçerli modüle ait bileşenleri, yönergeleri ve boruları bildirmek için kullanılır. Beyannameler içindeki herkes birbirini tanıyor. Örneğin, bir bileşenimiz varsa, kullanıcı adlarının bir listesini görüntüleyen UsernameComponent deyin ve bir de pipetimiz var, dize büyük harfli bir dize dönüştüren toupperPipe deyin. Şimdi kullanıcı adlarını UsernameComponent'imizde büyük harflerle göstermek istiyorsak, daha önce oluşturduğumuz toupperPipe'ı kullanabiliriz, ancak şu soru da UsernameComponent'in toupperPipe'ın var olduğunu ve buna nasıl erişip kullanabileceğini sormasıdır. İşte bildirimler geliyor, UsernameComponent ve toupperPipe bildirebiliriz.
Providers
modüldeki bileşenlerin, direktiflerin ve boruların gerektirdiği hizmetleri enjekte etmek için kullanılır.
Bileşenler bildirilir, Modüller içe aktarılır ve Hizmetler sağlanır. Çalıştığım bir örnek:
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
yapılar:import { x } from 'y';
: Bu, ES2015/ES6
diğer dosyalardan kod içe aktarmak için standart dizgi sözdizimidir ( modül sözdizimi). Bu Açısal özel değildir . Ayrıca bu teknik olarak modülün bir parçası değildir, sadece gerekli kodun bu dosya kapsamında olması gerekir.imports: [FormsModule]
: Diğer modülleri buraya aktarıyorsunuz. Örneğin FormsModule
, aşağıdaki örnekte içe aktarıyoruz. Artık FormsModule'un bu modül boyunca sunduğu işlevselliği kullanabiliriz.declarations: [OnlineHeaderComponent, ReCaptcha2Directive]
: Bileşenlerinizi, direktiflerinizi ve borularınızı buraya koydunuz. Burada ilan edildikten sonra, şimdi tüm modül boyunca kullanabilirsiniz. Örneğin artık kullanabilirsiniz OnlineHeaderComponent
içinde AppComponent
görünümü (html dosyası). Açısal bunu nerede bulacağını biliyor OnlineHeaderComponent
çünkü @NgModule
.providers: [RegisterService]
: Burada bu özel modülün hizmetlerimiz tanımlanmıştır. Bağımlılık enjeksiyonu ile enjekte ederek bileşenlerinizdeki servisleri kullanabilirsiniz.// 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 { }
Angular ile uzun aradan sonra yardımcı olabilecek hızlı bir hile sayfası ekleme:
Misal:
declarations: [AppComponent]
Buraya ne enjekte edebiliriz? Bileşenler, borular, yönergeler
Misal:
imports: [BrowserModule, AppRoutingModule]
Buraya ne enjekte edebiliriz? diğer modüller
Misal:
providers: [UserService]
Buraya ne enjekte edebiliriz? Hizmetler
Misal:
bootstrap: [AppComponent]
Buraya ne enjekte edebiliriz? bu modül tarafından oluşturulacak ana bileşen (bir bileşen ağacı için üst üst düğüm)
Misal:
entryComponents: [PopupComponent]
Buraya ne enjekte edebiliriz? dinamik olarak oluşturulan bileşenler (örneğin ViewContainerRef.createComponent () kullanarak)
Misal:
export: [TextDirective, PopupComponent, BrowserModule]
Buraya ne enjekte edebiliriz? başka bir modülde bunlara erişmek istediğimiz bileşenler, yönergeler, modüller veya borular (bu modülü içe aktardıktan sonra)
forRoot()
tembel yüklü bir modül kullanmak yerine, bir CoreModule uygulama genelinde sağlayıcıları koymak olduğunu . Katılıyor musun? Çekirdek Modülüne bakın . # Root için paylaşılan modülün bağlantısı artık mevcut değil.