热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

(一)什么是Angular模块?

原文链接:https:angular-2-training-book.rangle.iohandoutmodulesintroduction.html什么是Angul

原文链接:https://angular-2-training-book.rangle.io/handout/modules/introduction.html



什么是Angular模块?


在Angular中,模块是一种用于组合相关联组件,指令,管道和服务的机制,可以与其他模块组合以创建应用程序。 一个Angular应用程序可以被认为是一个拼图,每个部分(或每个模块)能够看到完整的图片。

为了理解,我们可以将Angular模块比作是类。 在一个类中,我们可以定义公共或私有方法。 公共方法是我们代码的其他部分可以使用它与之交互的API,而私有方法是隐藏的实现细节。 同样,模块可以导出或隐藏组件,指令,管道和服务。 导出的元素意图被其他模块使用,而未导出(隐藏)的元素仅在模块本身内部使用,不能被我们应用程序的其他模块直接访问。


模块的基本使用

为了能够定义模块,我们必须使用装饰器 NgModule.

import { NgModule } from '@angular/core';@NgModule({imports: [ ... ],declarations: [ ... ],bootstrap: [ ... ]
})
export class AppModule { }

在上面的例子中,我们已经通过使用NgModule装饰器将AppModule 类转换为Angular模块。NgModule装饰器至少需要三个属性:imports, declarationsbootstrap.

属性imports需要一个模块数组。 这里我们定义了我们的拼图图片(我们的应用程序所需模块)。 属性declarations需要一个组件,指令和管道数组作为模块的一部分。 bootstrap属性是我们定义模块的根组件的地方。 即使这个属性也是一个数组,99%的时候我们只定义一个组件。


有些非常特殊的情况,可能需要多个组件来引导模块,但我们不会在这里讨论这些个别情况。


以下是仅由一个组件构成的基本模块,如下所示:

app/app.component.ts

import { Component } from '@angular/core';@Component({selector: 'app-root',template: '

hello world

'
})
export class AppComponent {}

app/app.module.ts

import { NgModule } from '@angular/core';
import { BrowserModule } from '@angular/platform-browser';import { AppComponent } from './app.component';@NgModule({imports: [BrowserModule],declarations: [AppComponent],bootstrap: [AppComponent]
})
export class AppModule { }

文件app.component.ts只是一个“你好世界”的组件,没有什么特别的。 另一方面,文件app.module.ts遵循我们之前看过的用于定义模块的结构,但在这种情况下,我们正在定义要使用的模块和组件。

我们注意到的第一件事是我们的模块导入BrowserModule作为显式依赖。BrowserModule是一个内置的模块,用于导出基本的指令,管道和服务。 与以前的Angular版本不同,我们必须明确导入这些依赖关系,以便在我们的模板中使用*ngFor*ngIf 等指令。

鉴于我们模块的根(而且仅有的)组件是AppComponent ,我们必须在 bootstrap数组中列出它。 因为在declarations属性中,我们应该定义构成应用程序的所有组件或管道,我们必须再次定义AppComponent

在继续之前,有一个重要的澄清要做。 存在两种类型的模块,根模块和功能模块 。

以同样的方式,在一个模块中,我们有一个根组件和许多可能的辅助组件, 在应用程序中,我们只有一个根模块和零个或许多功能模块 。 为了能够引导我们的应用程序,Angular需要知道哪个是根模块。 识别根模块的简单方法是查看其NgModule装饰器的 imports 属性。 如果模块导入BrowserModule那么它是一个根模块,如果正在导入CommonModule那么它是一个功能模块。


作为开发人员,我们需要注意在根模块中导入BrowserModule ,而是在为同一应用程序创建的任何其他模块中导入CommonModule 。 如果不这样做,可能会导致在使用延迟加载的模块时遇到问题,我们将在以下部分中看到。


根据惯例,根模块应该始终被命名为AppModule


引导应用程序

为了引导我们基于模块的应用程序,我们需要通知Angular哪个是我们的根模块来在浏览器中执行编译。 这个在浏览器中的编译也称为“即时”(JIT)编译。

main.ts

import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';
import { AppModule } from './app/app.module';platformBrowserDynamic().bootstrapModule(AppModule);

还可以执行编译作为我们工作流的构建步骤。 这种方法称为“Ahead of Time”(AOT)编译,并且将需要稍微不同的引导过程,我们将在另一部分中讨论。


查看示例

在下一节中,我们将看到如何创建具有多个组件,服务和管道的模块。


推荐阅读
  • 深入解析Java虚拟机的内存分区与管理机制
    Java虚拟机的内存分区与管理机制复杂且精细。其中,某些内存区域在虚拟机启动时即创建并持续存在,而另一些则随用户线程的生命周期动态创建和销毁。例如,每个线程都拥有一个独立的程序计数器,确保线程切换后能够准确恢复到之前的执行位置。这种设计不仅提高了多线程环境下的执行效率,还增强了系统的稳定性和可靠性。 ... [详细]
  • 本指南介绍了如何在ASP.NET Web应用程序中利用C#和JavaScript实现基于指纹识别的登录系统。通过集成指纹识别技术,用户无需输入传统的登录ID即可完成身份验证,从而提升用户体验和安全性。我们将详细探讨如何配置和部署这一功能,确保系统的稳定性和可靠性。 ... [详细]
  • 使用 ListView 浏览安卓系统中的回收站文件 ... [详细]
  • C++ 异步编程中获取线程执行结果的方法与技巧及其在前端开发中的应用探讨
    本文探讨了C++异步编程中获取线程执行结果的方法与技巧,并深入分析了这些技术在前端开发中的应用。通过对比不同的异步编程模型,本文详细介绍了如何高效地处理多线程任务,确保程序的稳定性和性能。同时,文章还结合实际案例,展示了这些方法在前端异步编程中的具体实现和优化策略。 ... [详细]
  • Python 程序转换为 EXE 文件:详细解析 .py 脚本打包成独立可执行文件的方法与技巧
    在开发了几个简单的爬虫 Python 程序后,我决定将其封装成独立的可执行文件以便于分发和使用。为了实现这一目标,首先需要解决的是如何将 Python 脚本转换为 EXE 文件。在这个过程中,我选择了 Qt 作为 GUI 框架,因为之前对此并不熟悉,希望通过这个项目进一步学习和掌握 Qt 的基本用法。本文将详细介绍从 .py 脚本到 EXE 文件的整个过程,包括所需工具、具体步骤以及常见问题的解决方案。 ... [详细]
  • PHP预处理常量详解:如何定义与使用常量 ... [详细]
  • 本指南介绍了 `requests` 库的基本使用方法,详细解释了其七个主要函数。其中,`requests.request()` 是构建请求的基础方法,支持其他高级功能的实现。此外,我们还重点介绍了如何使用 `requests.get()` 方法来获取 HTML 网页内容,这是进行网页数据抓取和解析的重要步骤。通过这些基础方法,读者可以轻松上手并掌握网页数据抓取的核心技巧。 ... [详细]
  • Android 构建基础流程详解
    Android 构建基础流程详解 ... [详细]
  • 深入浅出 webpack 系列(二):实现 PostCSS 代码的编译与优化
    在前一篇文章中,我们探讨了如何通过基础配置使 Webpack 完成 ES6 代码的编译。本文将深入讲解如何利用 Webpack 实现 PostCSS 代码的编译与优化,包括配置相关插件和加载器,以提升开发效率和代码质量。我们将详细介绍每个步骤,并提供实用示例,帮助读者更好地理解和应用这些技术。 ... [详细]
  • 为了确保iOS应用能够安全地访问网站数据,本文介绍了如何在Nginx服务器上轻松配置CertBot以实现SSL证书的自动化管理。通过这一过程,可以确保应用始终使用HTTPS协议,从而提升数据传输的安全性和可靠性。文章详细阐述了配置步骤和常见问题的解决方法,帮助读者快速上手并成功部署SSL证书。 ... [详细]
  • 在Java程序设计中,实现高效的分页功能是提升应用性能的关键之一。本文介绍了通过使用 `PageController` 类来处理大数据集的分页操作,该类能够从一个较大的集合中提取出指定大小的小集合。具体实现中,通过优化数据访问和减少内存消耗,确保了分页操作的高效性和稳定性。此外,文章还探讨了分页算法的优化策略,包括缓存机制和懒加载技术的应用,以进一步提高系统的响应速度和用户体验。 ... [详细]
  • Python 伦理黑客技术:深入探讨后门攻击(第三部分)
    在《Python 伦理黑客技术:深入探讨后门攻击(第三部分)》中,作者详细分析了后门攻击中的Socket问题。由于TCP协议基于流,难以确定消息批次的结束点,这给后门攻击的实现带来了挑战。为了解决这一问题,文章提出了一系列有效的技术方案,包括使用特定的分隔符和长度前缀,以确保数据包的准确传输和解析。这些方法不仅提高了攻击的隐蔽性和可靠性,还为安全研究人员提供了宝贵的参考。 ... [详细]
  • 在本文中,我们将详细介绍如何构建一个用于自动回复消息的XML类。当微信服务器接收到用户消息时,该类将生成相应的自动回复消息。以下是具体的代码实现:```phpclass We_Xml { // 代码内容}```通过这个类,开发者可以轻松地处理各种消息类型,并实现高效的自动回复功能。我们将深入探讨类的各个方法和属性,帮助读者更好地理解和应用这一技术。 ... [详细]
  • 在 CentOS 7 系统中安装 Scrapy 时遇到了一些挑战。尽管 Scrapy 在 Ubuntu 上安装简便,但在 CentOS 7 上需要额外的配置和步骤。本文总结了常见问题及其解决方案,帮助用户顺利安装并使用 Scrapy 进行网络爬虫开发。 ... [详细]
  • 为了优化用户体验,本文探讨了如何调整下拉菜单的宽度。通过合理设置宽度,可以提升界面的美观性和易用性。文章提供了具体的代码示例,帮助开发者实现这一目标。例如,可以通过 CSS 或 JavaScript 来动态调整下拉菜单的宽度,确保其在不同设备和屏幕尺寸上都能保持良好的显示效果。 ... [详细]
author-avatar
手机用户2502899267
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有