用這個@NgModule()這個decorator ,放在一個class的上面,這個class一個一個module了html
@NgModule() 裏面的參數是一個對象,用來配置的,聲明這個module裏面的一些co'mponents, directives, pipes....bootstrap
https://stackoverflow.com/questions/40393701/what-actually-is-ngmodule-in-angularapp
--------------------------------------------------------------dom
Angular NgModules differ from and complement JavaScript (ES2015) modules. An NgModule declares a compilation context for a set of components that is dedicated to an application domain, a workflow, or a closely related set of capabilities. An NgModule can associate its components with related code, such as services, to form functional units.ide
An NgModule is defined by a class decorated with @NgModule(). The @NgModule() decorator is a function that takes a single metadata object, whose properties describe the module. The most important properties are as follows.ui
declarations: The components, directives, and pipes that belong to this NgModule.this
exports: The subset of declarations that should be visible and usable in the component templates of other NgModules.spa
imports: Other modules whose exported classes are needed by component templates declared in this NgModule.code
providers: Creators of services that this NgModule contributes to the global collection of services; they become accessible in all parts of the app. (You can also specify providers at the component level, which is often preferred.)component
bootstrap: The main application view, called the root component, which hosts all other app views. Only the root NgModule should set the bootstrap property.
-----------------------------
First of all, have another read of https://angular.io/docs/ts/latest/guide/ngmodule.html and definitely https://angular.io/docs/ts/latest/cookbook/ngmodule-faq.html as well.
An @NgModule does all the magic setup. It sets up the dependency injection, pulls in any 3rd party modules that it uses, declares all the Components/Directives/Pipes/etc. that are used within the module, exposes some of those Components etc. to other modules, sets up the routing for the module, and sets up any "boostrap" components that can be used as the root Component.
There's two types of modules. First, there's your 'Root module', which is the entry point of your app. You can technically put everything in your app into just one module.
Then there's 'Feature modules', which are used for separation of concerns during development, but also for things like lazy-loading of parts of the app. This is more of an issue for larger apps, but it doing it early can certainly help you set things up "right".