提示:观看 YouTube 上的此视频,了解如何将 Angular Web 应用程序迁移到 NativeScript:将原生移动设备添加到您的 Angular 项目:迁移故事
就像所有蘑菇都是可以食用的,除了有些蘑菇你一生只能吃一次,NgModules 也一样 - 有些你可以到处导入,有些只能在每个应用程序中导入一次。
您知道哪些模块应该在任何地方导入,哪些只导入一次吗?
您知道每次在每个 @NgModule
中添加 NativeScriptModule
时会发生什么吗?
让我来帮助您。
NativeScriptModule 和 NativeScriptAnimationsModule 只能在您的 AppModule
中导入。如果您多次导入它们,则应用程序的性能可能会受到影响。
NativeScriptModule - 提供运行 NativeScript 应用程序所必需的服务。最重要的是它提供了渲染器。由于每个延迟加载的模块都有自己的依赖项注入器,因此如果我们在每个延迟加载的模块中导入 NativeScriptModule,最终将得到一堆渲染器。这也会给 Angular 动画带来很多问题。
NativeScriptAnimationsModule - 通过 初始化关键动画元素 AnimationDriver
、AnimationBuilder
、AnimationStyleNormalizer
、AnimationEngine
来开始,但最重要的是它 围绕渲染器创建了一个包装器。
为了帮助您正确使用它们,我们将在这些模块中添加一些更改,这样当您多次导入其中任何一个时,您将看到类似于此的错误消息
NativeScriptAnimationsModule has already been loaded.
Import NativeScriptAnimationsModule in the AppModule only.
某些模块可以在(甚至应该)每个功能和延迟加载的模块中导入。
您应该在每个功能和延迟加载的模块中导入 NativeScriptCommonModule
。但是,您不需要在 AppModule
中导入它,因为它应该已经由 NativeScriptModule
导出。
NativeScriptCommonModule - 使您可以访问常见的 Angular 指令(即 *ngFor
和 *ngIf
等等),但它还为您提供了 NativeScript UI 组件(即 ListViewComponent
和 ActionBarComponent
)。
还有一些模块,您应该只在需要时导入。
NativeScriptHttpClientModule(及其 已弃用 的旧兄弟 NativeScriptHttpModule
) - 允许您进行 http
调用。
最佳实践:仅在以下模块中导入 NativeScriptHttpClientModule
(或 NativeScriptHttpModule
)
HttpClient
(或 Http
)的服务HttpClient
(或 Http
)的组件,但不要在它们只是注入使用 HttpClient
(或 Http
)的服务时声明它们。
NativeScriptFormsModule - 为您提供使用 [(ngModule)]
的双向绑定。
最佳实践类似于
哪里有烟,哪里就有火
或者用 Angular 的术语来说
哪里有
[(ngModule)]
,哪里就有NativeScriptFormsModule
NativeScriptRouterModule - 为您提供了在 NativeScript 应用程序中进行导航的必要项目:RouterExtensions
和 [nsRouterLink]
。
最佳实践:它应该在 AppModule
中导入,并且每个包含以下组件的延迟加载的捆绑包中只导入一次
Router
或 RouterExtensions
(在构造函数中),或者@Component({...})
export class MyComponent {
constructor(private router: RouterExtensions) { }
}
[nsRouterLink]
指令 <label text="Go Home" [nsRouterLink]="['/home']"></label>
永远不要在多个模块中提供相同的服务,因为这将为每个模块创建一个新的服务副本。
NgModule | 从哪里导入 | 如何使用它 |
---|---|---|
NativeScriptModule | nativescript-angular/nativescript.module | 始终添加到 AppModule |
NativeScriptCommonModule | nativescript-angular/common | 不要添加到 AppModule 添加到其余模块 |
NativeScriptAnimationsModule | nativescript-angular/animations | 仅添加到 AppModule 仅在您需要 Angular 动画时使用 |
NativeScriptHttpClientModule | nativescript-angular/http-client | 仅在任何模块的服务或组件注入 HttpClient 时使用 |
NativeScriptFormsModule | nativescript-angular/forms | 在每个使用 [(ngModule)] 的双向绑定的模块中使用 |
NativeScriptRouterModule | nativescript-angular/router | 在模块的服务或组件使用导航时使用 |
了解共享模块也很重要,共享模块允许您预先打包常用的指令和管道。
您可以阅读更多相关信息 在 Angular 文档中