Angular 2 架构(上)

2021-07-26 18:06:55 浏览数 (1)

Angular 2 应用程序应用主要由以下 8 个部分组成:

  • 1、模块 (Modules)
  • 2、组件 (Components)
  • 3、模板 (Templates)
  • 4、元数据 (Metadata)
  • 5、数据绑定 (Data Binding)
  • 6、指令 (Directives)
  • 7、服务 (Services)
  • 8、依赖注入 (Dependency Injection)

下图展示了每个部分是如何相互工作的:

图中的模板 (Templates)是由 Angular 扩展的 HTML 语法组成,组件 (Components)类用来管理这些模板,应用逻辑部分通过服务 (Services)来完成,然后在模块中打包服务与组件,最后通过引导根模块来启动应用。

接下来我们会对以上 8 个部分分开解析:


模块

模块由一块代码组成,可用于执行一个简单的任务。

Angular 应用是由模块化的,它有自己的模块系统:NgModules。

每个 Angular 应该至少要有一个模块(根模块),一般可以命名为:AppModule。

Angular 模块是一个带有 @NgModule 装饰器的类,它接收一个用来描述模块属性的元数据对象。

几个重要的属性如下:

  • declarations (声明) - 视图类属于这个模块。 Angular 有三种类型的视图类: 组件 、 指令 和 管道 。
  • exports - 声明( declaration )的子集,可用于其它模块中的组件模板 。
  • imports - 本模块组件模板中需要由其它导出类的模块。
  • providers - 服务的创建者。本模块把它们加入全局的服务表中,让它们在应用中的任何部分都可被访问到。
  • bootstrap - 应用的主视图,称为根组件,它是所有其它应用视图的宿主。只有根模块需要设置 bootstrap 属性中。

一个最简单的根模块:

app/app.module.ts 文件:

代码语言:javascript复制
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 { }

接下来我们通过引导根模块来启动应用,开发过程通常在 main.ts 文件中来引导 AppModule ,代码如下:

app/main.ts 文件:

代码语言:javascript复制
import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';
import { AppModule } from './app.module';
 
platformBrowserDynamic().bootstrapModule(AppModule);

组件(Components)

组件是一个模板的控制类用于处理应用和逻辑页面的视图部分。

组件是构成 Angular 应用的基础和核心,可用于整个应用程序中。

组件知道如何渲染自己及配置依赖注入。

组件通过一些由属性和方法组成的 API 与视图交互。

创建 Angular 组件的方法有三步:

  • 从 @angular/core 中引入 Component 修饰器
  • 建立一个普通的类,并用 @Component 修饰它
  • 在 @Component 中,设置 selector 自定义标签,以及 template 模板

模板(Templates)

Angular模板的默认语言就是HTML。

我们可以通过使用模板来定义组件的视图来告诉 Angular 如何显示组件。以下是一个简单是实例:

代码语言:javascript复制
<div>
网站地址 : {{site}}
</div>

在Angular中,默认使用的是双大括号作为插值语法,大括号中间的值通常是一个组件属性的变量名。


元数据(Metadata)

元数据告诉 Angular 如何处理一个类。

考虑以下情况我们有一个组件叫作 Component ,它是一个类,直到我们告诉 Angular 这是一个组件为止。

你可以把元数据附加到这个类上来告诉 Angular Component 是一个组件。

在 TypeScript 中,我们用 装饰器 (decorator) 来附加元数据。

实例

代码语言:javascript复制
@Component({
   selector : 'mylist',
   template : '<h2>菜鸟教程</h2>'
   directives : [ComponentDetails]
})
export class ListComponent{...}

@Component 装饰器能接受一个配置对象,并把紧随其后的类标记成了组件类。

Angular 会基于这些信息创建和展示组件及其视图。

@Component 中的配置项说明:

  • selector - 一个 css 选择器,它告诉 Angular 在 父级 HTML 中寻找一个 <mylist> 标签,然后创建该组件,并插入此标签中。
  • templateUrl - 组件 HTML 模板的地址。
  • directives - 一个数组,包含 此 模板需要依赖的组件或指令。
  • providers - 一个数组,包含组件所依赖的服务所需要的依赖注入提供者。

0 人点赞