[問題] 請問為什麼已經Import module還要用NgModule這個Decorator 才能使用?

官網上有這段範例,我的疑問是,為何其他component都可以直接Import直接用,可是宣告module的時候卻需要@NgModule? 如果直接寫TypeScript的時候也是Import什麼就可以直接用,那到底NgModule的作用是什麼?只是為了把這個Module初始化嗎?那這個動作在做什麼呢?感謝!

import { NgModule } from ‘@angular/core’;
import { BrowserModule } from ‘@angular/platform-browser’;
@NgModule({
imports: [BrowserModule],
providers: [Logger],
declarations: [AppComponent],
exports: [AppComponent],
bootstrap: [AppComponent]
})
export class AppModule { }

@NgModule() 
@Component()
@Injectable()
....

以上這些都稱作 decorator,是用來描述並擴充既有 class/function/property 功能用的
在 Angular 裡面如果要建立一個 component, 也是需要在某一個 class 上面寫 @Component({...}) ,才可以將下面所描述的 class 變成一個 Angular 能處理的 component 類型,其他相對的還有@Pipe({}) @Directive({})` 這些都是

延伸閱讀 - API List - Decorator
Decorator

所以你的問題會回歸到, javascript 裡面的 decorator 原本的功用是什麼

3個讚

Kevin 說的不錯。
另外之所以需要 NgModule 來標識 Module,是因為 Ioc 需要一個容器來掛載所有的服務。當然這個語法糖只是看起來更舒服,為 AppModule 添加元信息而已。