返回顶部
首页 > 资讯 > 前端开发 > node.js >Angular有哪些主要构造块
  • 588
分享到

Angular有哪些主要构造块

2024-04-02 19:04:59 588人浏览 薄情痞子
摘要

这篇文章将为大家详细讲解有关angular有哪些主要构造块,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。Angular 主要分为八大构造块(也就是八个核心概念):模块 (

这篇文章将为大家详细讲解有关angular有哪些主要构造块,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。

Angular 主要分为八大构造块(也就是八个核心概念):模块 (module)、组件 (component)、模板 (template)、元数据 (metadata)、数据绑定 (data binding)、指令 (directive)、服务 (service)、依赖注入 (dependency injection)。其中,最核心的一个概念就就组件。

1. 模块 (module)

Angular 应用是模块化的,并且 Angular 有自己的模块系统,它被称为 Angular 模块或 NgModules。

每个Angular应用至少有一个模块(根模块),习惯上命名为AppModule。

根模块在一些小型应用中可能是唯一的模块,大多数应用会有很多特性模块,每个模块都是一个内聚的代码块专注于某个应用领域、工作流或紧密相关的功能。

Angular 模块(无论是根模块还是特性模块)都是一个带有@NgModule装饰器的类。

下面是一个简单的根模块:

// src/app/app.module.ts

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 { }

其中重要的属性是:

  1. declarations - 声明本模块中拥有的视图类。Angular 有三种视图类:组件、指令、管道;

  2. exports - declarations 的子集,可用于其它模块的组件;

  3. imports - 本模块声明的组件模板需要的类所在的其它模块。用来导入其他自定义模块,第三方插件模块;

  4. providers - 服务的创建者,并加入到全局服务列表中,可用于应用任何部分;

  5. bootstrap - 指定应用的主视图(称为根组件),它是所有其它视图的宿主。只有根模块才能设置bootstrap属性。通常在main.ts中引导AppModule,这样platformBrowserDynamic().bootstrapModule(AppModule)

2. 组件 (component)

组件负责控制屏幕上的一小块区域,我们称之为视图。

下面是一个组件的简单例子:

// src/app/hero-list.component.ts

export class HeroListComponent implements OnInit {
 heroes: Hero[];
 selectedHero: Hero;

 constructor(private service: HeroService) { }

 nGonInit() {
  this.heroes = this.service.getHeroes();
 }

 selectHero(hero: Hero) { this.selectedHero = hero; }
}

3. 模板 (template)

模板就是html文件,但是不是标准的HTML文件,它使用了一些模板语法,模板语法使模板有了自己的逻辑关系,并能够实现和组件的简单数据交互。

下面是一个简单的模板:

// src/app/hero-list.component.html

<h3>Hero List</h3>
<p><i>Pick a hero from the list</i></p>
<ul>
 <li *ngFor="let hero of heroes" (click)="selectHero(hero)">
  {{hero.name}}
 </li>
</ul>
<hero-detail *ngIf="selectedHero" [hero]="selectedHero"></hero-detail>

通常使用ng g component my-comoponent命令产生一个组件包含四个文件:

my-comoponent.CSS      // 样式文件
my-comoponent.thml      // 模板
my-comoponent.spec.ts    // 测试文件
my-comoponent.ts      // 这是组件? 通常我们认为这四个文件组成一个组件

4. 元数据 (metadata)

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

其实,在Angular中每个组件只是一个类,但是我们可以通过装饰器来附加元数据告诉Angular这是一个组件。

下面就是HeroListComponent的一些元数据。

// src/app/hero-list.component.ts (metadata)

@Component({  // @Component 将后面的 HeroListComponent 类标记为一个组件
 selector:  'hero-list',
 templateUrl: './hero-list.component.html',
 providers: [ HeroService ]
})
export class HeroListComponent implements OnInit {

}

@Component装饰器能接受一个配置对象, Angular 会基于这些信息创建和展示组件及其视图。

@Component的配置项包括:

  1. selector: CSS选择器,它告诉Angular在父级HTML中查找<hero-list>标签,创建并插入该组件。 例如,如果应用的HTML 包含<hero-list></hero-list>, Angular就会把HeroListComponent的一个实例插入到这个标签中;

  2. templateUrl:组件HTML 模板的模块相对地址;

  3. providers - 组件所需服务的依赖注入提供商数组。 这是在告诉 Angular:该组件的构造函数需要一个HeroService服务,这样组件就可以从服务中获得英雄数据。

到这里你应该可以明白:模板、元数据和组件共同描绘出这个视图。

5. 数据绑定 (databinding)

数据绑定是Angular中最常用的数据处理模式。数据绑定在模板与对应组件的交互中扮演了重要的角色,在父组件与子组件的通讯中也同样重要。

下面是一个简单的例子:

// src/app/hero-list.component.html 

<li>{{hero.name}}</li>
<hero-detail [hero]="selectedHero"></hero-detail>
<li (click)="selectHero(hero)"></li>
  1. {{hero.name}}插值表达式在<li>标签中显示组件的hero.name属性的值;

  2. [hero]属性绑定把父组件HeroListComponent的selectedHero的值传到子组件HeroDetailComponent的hero属性中;

  3. (click) 事件绑定在用户点击英雄的名字时调用组件的selectHero方法。

Angular默认没有双向绑定,但是,官方推荐这样来实现双向绑定:

<input [(ngModel)]="hero.name">

Angular 在每个 javascript 事件循环中处理所有的数据绑定,它会从组件树的根部开始,递归处理全部子组件。

6. 指令 (directive)

由于Angular模板是动态的,所以你需要通过指令实现对DOM的转换。(组件是一个带模板的指令;@Component装饰器实际上就是一个@Directive装饰器,只是扩展了一些面向模板的特性。 )

指令分为两种:结构指令、属性指令。

a. 结构指令: 通过在 DOM 中添加、移除和替换元素来修改布局。

下面是一个简单的内置结构指令的例子:

<!-- src/app/hero-list.component.html (structural) -->

<li *ngFor="let hero of heroes"></li>
<hero-detail *ngIf="selectedHero"></hero-detail>
  1. *ngFor告诉 Angular 为heroes列表中的每个英雄生成一个<li>标签。

  2. *ngIf表示只有在选择的英雄存在时,才会包含HeroDetail组件。

b. 属性指令:修改一个现有元素的外观或行为。

简单例子:

<!-- src/app/hero-detail.component.html -->
<input [(ngModel)]="hero.name">

7. 服务 (service)

服务是一个广义范畴,包括:值、函数,或应用所需的特性。几乎任何东西都可以是一个服务。 典型的服务是一个类,具有专注的、明确的用途。它应该做一件特定的事情,并把它做好。

例如:

  1. 日志服务

  2. 数据服务

  3. 消息总线

  4. 税款计算器

  5. 应用程序配置

组件类应保持精简。组件本身不从服务器获得数据、不进行验证输入,也不直接往控制台写日志。 它们把这些任务委托给服务。所以说服务是跑腿的,服务一般用来处理业务逻辑,被注入在组件当中,服务是全局单例的。也就是说注入到所有组件中的服务是同一个。

一个简单的例子:

// src/app/hero.service.ts 

export class HeroService {
 private heroes: Hero[] = [];

 constructor(
  private backend: BackendService,
  private logger: Logger) { }

 getHeroes() {
  this.backend.getAll(Hero).then( (heroes: Hero[]) => {
   this.logger.log(`Fetched ${heroes.length} heroes.`);
   this.heroes.push(...heroes); // fill cache
  });
  return this.heroes;
 }
}

8. 依赖注入 (denpendency injection)

“依赖注入”是提供类的新实例的一种方式,还负责处理好类所需的全部依赖。大多数依赖都是服务。 Angular 使用依赖注入来提供新组件以及组件所需的服务。

来看注入方式:

// src/app/hero-list.component.ts

constructor(private service: HeroService) { }

注入器维护了一个服务实例的容器,存放着以前创建的实例。 如果所请求的服务实例不在容器中,注入器就会创建一个服务实例,并且添加到容器中,然后把这个服务返回给 Angular。 当所有请求的服务都被解析完并返回时,Angular 会以这些服务为参数去调用组件的构造函数。 这就是依赖注入 。

通常我们将服务声明在根模块,以便在整个应用中使用这个服务。

// src/app/app.module.ts

providers: [
 BackendService,
 HeroService,
 Logger
],

也可以在其他组件中声明服务,那么这个服务只能用于当前组件。把它注册在组件级表示该组件的每一个新实例都会有一个服务的新实例。

// src/app/hero-list.component.ts

@Component({
 selector:  'hero-list',
 templateUrl: './hero-list.component.html',
 providers: [ HeroService ]
})

关于“Angular有哪些主要构造块”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。

--结束END--

本文标题: Angular有哪些主要构造块

本文链接: https://lsjlt.com/news/79431.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Angular有哪些主要构造块
    这篇文章将为大家详细讲解有关Angular有哪些主要构造块,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。Angular 主要分为八大构造块(也就是八个核心概念):模块 (...
    99+
    2024-04-02
  • HTML主要的板块有哪些
    今天小编给大家分享一下HTML主要的板块有哪些的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧...
    99+
    2024-04-02
  • 在java中spring有哪些主要模块
    java中spring主要模块有: Spring AOP:面相切面编程,提供了用标准Java语言编写的AOP框架。 Spring ORM:对Hibernate提供了完美的整合功能,同时也支持其他ORM工具。 Spring Core :实现了...
    99+
    2024-04-02
  • 物联网的架构主要有哪些
    小编给大家分享一下物联网的架构主要有哪些,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!物联网的架构主要分为:1、感知层,是物联网发展和应用的基础;2、网络层,建立...
    99+
    2023-06-20
  • 架构师的主要职责有哪些
    本篇内容介绍了“架构师的主要职责有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!架构师主要职责有4条:1、确认需求在项目开发过程中,架构...
    99+
    2023-06-15
  • Python构造函数有哪些
    Python中的构造函数是__init__函数Python中子类如果定义了构造函数,父类的构造函数是不会执行的。__init__函数使用方法:class A:def __init__(self, name):self.name = name...
    99+
    2024-04-02
  • C#杂项构造有哪些
    本篇内容主要讲解“C#杂项构造有哪些”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“C#杂项构造有哪些”吧!杂项构造下表列出了各种杂项构造:构造描述实例(imnsx-imnsx)在模式中间对诸如不...
    99+
    2023-06-17
  • 大前端主要有哪些语言构成
    这篇文章主要为大家展示了“大前端主要有哪些语言构成”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“大前端主要有哪些语言构成”这篇文章吧。我们知道常说的前端是指ht...
    99+
    2024-04-02
  • C#的分组构造有哪些
    本篇内容介绍了“C#的分组构造有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!分组构造分组构造描述了正则表达式的子表达式,通常用于捕获输...
    99+
    2023-06-17
  • php构造方法和java构造方法有哪些区别
    这篇文章主要介绍“php构造方法和java构造方法有哪些区别”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“php构造方法和java构造方法有哪些区别”文章能帮助大家解决问题。区别:1、重写子类构造函...
    99+
    2023-06-29
  • java构造器的作用有哪些
    Java构造器的作用有以下几点:1. 创建对象:构造器用于创建一个新的对象,并初始化该对象的成员变量。2. 初始化对象的状态:构造器...
    99+
    2023-08-30
    java
  • Linux主流架构有哪些
    这篇文章主要讲解了“Linux主流架构有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Linux主流架构有哪些”吧!目前用的最多的Linux下主流网站架构:LVS+KEEPALIVED(...
    99+
    2023-06-16
  • javascript构造方法的缺点有哪些
    今天小编给大家分享一下javascript构造方法的缺点有哪些的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们...
    99+
    2024-04-02
  • C#的反向引用构造有哪些
    本文小编为大家详细介绍“C#的反向引用构造有哪些”,内容详细,步骤清晰,细节处理妥当,希望这篇“C#的反向引用构造有哪些”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。反向引用构造反向引用允许在同一正则表达式中随后...
    99+
    2023-06-17
  • Socket与ServerSocket类构造方法有哪些
    这篇文章主要介绍“Socket与ServerSocket类构造方法有哪些”,在日常操作中,相信很多人在Socket与ServerSocket类构造方法有哪些问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Soc...
    99+
    2023-06-22
  • java构造函数的特点有哪些
    Java构造函数的特点有以下几点:1. 构造函数的名称必须与类名完全相同,且没有返回类型,包括void类型。2. 构造函数在创建对象...
    99+
    2023-08-31
    java
  • swing的常用构造方法有哪些
    swing的常用构造方法有:1. JFrame():创建一个新的顶层窗口。2. JFrame(String title):创建一个新...
    99+
    2023-08-26
    swing
  • java构造方法的特点有哪些
    Java构造方法的特点有以下几个:1. 构造方法与类同名。构造方法的名称必须与类的名称相同。2. 构造方法没有返回类型。构造方法没有...
    99+
    2023-08-23
    java
  • redis构造器可选参数有哪些
    Redis构造器的可选参数有以下几种:1. host:Redis服务器的主机地址,默认为127.0.0.1。2. port:Redi...
    99+
    2023-08-24
    redis
  • java构造方法的作用有哪些
    Java的构造方法主要有以下几个作用: 创建对象:构造方法用于创建对象的实例,通过调用构造方法可以在内存中分配空间,并初始化对象...
    99+
    2023-10-26
    java
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作