美文网首页react & vue & angular
Angular 应用运行机制

Angular 应用运行机制

作者: 品品下午茶 | 来源:发表于2022-05-07 15:02 被阅读0次

当 Angualr CLI 构建一个 Angular 应用时,会按如下步骤进行:

  1. 解析 index.html 文件内容,识别出在 <body> 标签中包含的 HTML 标签元素。
  2. 如果发现未知的非标准的 HTML 标签元素,如 <app-root>.
  3. Angular CLI 会搜索应用的组件树,找到与 <app-root> 标签元素匹配的组件。
  4. <app-root> 标签元素的下一层级,绘制匹配的组件模板。
<app-root _nghost-icj-c11="" ng-version="10.2.5">
    <div _ngcontent-icj-c11="" role="banner" class="toolbar">
        ...
    </div>
    <div _ngcontent-icj-c11="" role="main" class="content">
        ...
    </div>
</app-root>

应用的组件来自哪里?组件又是如何与 index.html 文件中的定制 HTML 标签关联匹配的呢?

模块

Angular 应用的组件,都是通过模块(module)进行组织管理的。每个 Angular 应用可以包含多个模块,但是必须包含一个主模块,AppModule。

Angular 应用中的组件(component)需要在一个模块中进行注册,才能在应用运行时,被 Angular 框架发现和使用。

下面分析一下 AppModule 模块的代码,看看组件是如何在模块中注册的。

import { BrowserModule } from '@angular/platform-browser';
import { NgModule } from '@angular/core';

import { AppComponent } from './app.component';

@NgModule({
  declarations: [
    AppComponent
  ],
  imports: [
    BrowserModule
  ],
  providers: [],
  bootstrap: [AppComponent]
})
export class AppModule { }

在上面的代码中,我们可以看到,在模块的 declarations 属性中,包含了 AppComponent 组件。换句话说,AppComponent 组件通过 declarations 注册到了 AppModule 模块中。模块的 declarations 属性是一个数组类型,可以包含多个组件。所有添加到 declarations 属性中的组件,都可以被 Angualr 应用搜索到。

选择器

Angular 应用通过选择器(selector) 在 HTML 标签元素和 Angular 组件之间建立连接。
在 Angular 组件类中,可以设置选择器的名称:
selector: 'app-root'
在 index.html 文件中,可以设置 HTML 标签元素,标签元素的名称与组件类中选择器的名称相同。

<app-root></app-root>

组件模板

当 Angualr 遇到未知的 HTML 标签元素时,他就会搜索已经注册的组件,如果 HTML 标签元素的名称与组件类的选择器名称相同,就在该 HTML 标签元素下绘制组件模板(Component Template)的内容。

组件模板的文件地址,是通过组件类的 templateUrl 属性指定的。

templateUrl: './app.component.html',

我们可以使用 HTML 标准标签元素和 Angular 模板语法编写组件模板文件。Angular 模板语言对 HTML 和 JavaScript 进行了扩展,定制了他们对外观和行为。下面一行代码可以让我们有个初步的了解。

<span>{{ title }} app is running!</span>

{{ }} 是 Angular 模板语言的一种语法,称为 interpolation,其功能是读取组件类中的 title 属性,把 title 属性的值转换为文本,在页面中进行展现。假如 title 属性的值是 “Hello Angular 10”,那么,上面的代码在页面上的显示效果如下:

Hello Angular 10 app is running!

启动应用

最后,我们了解一下,Angular 应用是如何启动的。Angular 应用启动的代码位于 main.ts 文件中。

import { enableProdMode } from '@angular/core';
import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';

import { AppModule } from './app/app.module';
import { environment } from './environments/environment';

if (environment.production) {
  enableProdMode();
}

platformBrowserDynamic().bootstrapModule(AppModule)
  .catch(err => console.error(err));

Angular 应用的启动入口一直都是一个模块。在上面的代码中,AppModule 是应用入口,作为参数传递给 bootstrapModule 方法。而 platformBrowserDynamic 表示应用运行的目标平台是浏览器。

小结

通过阅读本文,希望大家对 Angular 应用的组成部分和运行机制有一个整体的了解,能够对继续深入学习 Angular 提供一些帮助。

相关文章

  • Angular 应用运行机制

    当 Angualr CLI 构建一个 Angular 应用时,会按如下步骤进行: 解析 index.html 文件...

  • Angular 运行机制

    Angular 模块 模块是用来组合相关组件、指令、服务等的一个功能块。可以理解为就是对一个应用所要用到的各个部分...

  • Angular-cli

    1.创建应用 安装 angular-clinpm install @angular/cli -g 创建应用ng n...

  • ng-book 2 - 002

    第三章:Angular的工作原理 Angular应用是由组件构成的当开发新的Angular应用时,先画出原型图,然...

  • Angular 2 模块(Modules)

    Angular 应用是模块化的,Angular 有自己的模块系统,叫做 Angular 模块 or NgModul...

  • Angular 路由入门

    我们可以通过下面几步操作,让 Angular 应用支持路由功能: 在 Angular 应用中设置基础路径。 使用 ...

  • Angular4-学习笔记-3-架构概览

    学习资料来自 Angular.cn 与 Angular.io。 架构概览 Angular 应用的实现方式: 用 A...

  • Angular Material应用程序主题化

    Theming your Angular Material app 将您的Angular Material应用程序...

  • Angular 权威教程 | 第1章 第一个Angular We

    仿制Reddit网站 读完本章之后, 你将掌握如何构建基本的Angular应用。 简单的应用将涵盖Angular中...

  • 创建一个 Angular 组件

    组件(Component)是 Angular 应用的基本组成单元。Angular 应用的组件可以控制页面上不同区块...

网友评论

    本文标题:Angular 应用运行机制

    本文链接:https://www.haomeiwen.com/subject/zefxurtx.html