0

0

Angular 4.0的架构使用详解

php中世界最好的语言

php中世界最好的语言

发布时间:2018-04-18 09:35:45

|

1647人浏览过

|

来源于php中文网

原创

这次给大家带来Angular 4.0的架构使用详解,Angular 4.0架构使用的注意事项有哪些,下面就是实战案例,一起来看一下。

前言

前段时间谷歌发布了广受欢迎的Angular JavaScript框架的4.0版本,该版本致力于缩小生成代码的体积,以及保持框架的简化发布计划。

很久没写这种比较偏概念类的东西了,不过我觉得没有形成一个知识架构,学习效率会大打折扣。在这里把我的所理解的知识分享给大家,部分内容引用自官方文档。下面进入主题

Angular架构概览

这个架构图展现了 Angular 应用中的 8 个主要构造块:

  • 模块 (module)

  • 组件 (component)

    mallcloud商城
    mallcloud商城

    mallcloud商城基于SpringBoot2.x、SpringCloud和SpringCloudAlibaba并采用前后端分离vue的企业级微服务敏捷开发系统架构。并引入组件化的思想实现高内聚低耦合,项目代码简洁注释丰富上手容易,适合学习和企业中使用。真正实现了基于RBAC、jwt和oauth2的无状态统一权限认证的解决方案,面向互联网设计同时适合B端和C端用户,支持CI/CD多环境部署,并提

    下载
  • 模板 (template)

  • 元数据 (metadata)

  • 数据绑定 (data binding)

  • 指令 (dirctive)

  • 服务 (service)

  • 依赖注入 (dependency injection)

接下来我按顺序并结合图来讲解一下。

1.模块 (module)

Angular 或者 ionic 新建的项目,都会存在一个根模块,默认名是 AppModule。如果你使用了模块化来创建应用,包括 AppModule,每个都会存在一个 @NgModule 装饰器的类(虽然他很像 java 中的注解,但是他的官方命名叫装饰器)。我们新建的页面,如果不使用懒加载,都要在 @NgModule 中先声明后使用。

下面举个例子,简单介绍一下 @NgModule 中的内容

//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 { }
  • imports 本模块声明的组件模板需要的类所在的其它模块。

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

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

  • exports declarations 的子集,可用于其它模块的组件模板。

  • bootstrap 指定应用的主视图(称为根组件),它是所有其它视图的宿主。只有根模块才能设置 bootstrap 属性。

在图中的意义:看图左上角,模块是用来接收一个用来描述模块属性元数据对象的。

2.组件 (component)、模板 (template)、元数据 (metadata)

这次我们把这三点一起来讲,先看一下这段代码

//hero-list.component.ts
@Component({
selector: 'hero-list',
templateUrl: './hero-list.component.html',
providers: [ HeroService ]
})
export class HeroListComponent implements OnInit {
/* . . . */
}

Component

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

  • selector:CSS 选择器,它告诉 Angular 在父级 HTML 中查找 标签,创建并插入该组件。

  • templateUrl:组件 HTML 模板的模块相对地址,如果使用 template 来写的话是用“`”这个符号来直接编写 HTML 代码。

  • providers:组件所需服务的依赖注入。

template

模板就是那段 HTML 代码,可以用 templateUrl 引入外面的,也可以用 template`` 直接写。

metadata

元数据装饰器用类似的方式来指导 Angular 的行为。 例如 @Input、@Output、@Injectable 等是一些最常用的装饰器,用法就不在这里展开了。

在图中的意义:看图中间那一块,模板、元数据和组件共同描绘出这个视图。

3.数据绑定 (data binding)

这里一共展示四种数据绑定,看一下示例代码:

//插值表达式 显示组件的hero.name属性的值
  • {{hero.name}}
  • //属性绑定 把父组件selectedHero的值传到子组件的hero属性中 //事件绑定 用户点击英雄的名字时调用组件的selectHero方法
  • //双向绑定 数据属性值通过属性绑定从组件流到输入框。用户的修改通过事件绑定流回组件,把属性值设置为最新的值

    可能大家对各种括号看的眼花了,总结一下:

    • 双花括号是单向绑定,传递的是值。方向是 组件 -> 模板。

    • 方括号是单向绑定,传递的是属性。方向是 父组件 -> 子组件。

    • 圆括号是事件绑定,处理点击等活动(action)。

    • 方括号套圆括号是双向绑定,方向是 组件 模板。

    在图中的意义:看图中间那一块,数据绑定给模板和组件提供数据交互的方式。

    4.指令 (directive)

    严格来说组件就是一个指令,但是组件非常独特,并在 Angular 中位于中心地位,所以在架构概览中,我们把组件从指令中独立了出来。

    我们这里提到的指令有两种类型:

    结构型 structural 指令和属性 attribute 型指令。

    放一下原文证明一下组件确实算是一个指令:

    While a component is technically a directive, components are so distinctive and central to Angular applications that this architectural overview separates components from directives.

    Two other kinds of directives exist: structural and attribute directives.

    结构型指令是 ngFor、ngIf 这种的,通过在 DOM 中添加、移除和替换元素来修改布局。

    属性型指令是 ngModel 这种的,用来修改一个现有元素的外观或行为。

    Angular 还有少量指令,它们或者修改结构布局(例如 ngSwitch ), 或者修改 DOM 元素和组件的各个方面(例如 ngStyle 和 ngClass)。之后我会单独写一篇讲他们用法的文章。

    在图中的意义:看图右上角那一块,组件是一个带模板的指令,只是扩展了一些面向模板的特性。

    5.服务 (service)

    官方文档的概念:

    服务是一个广义范畴,包括:值、函数,或应用所需的特性。服务没有什么特别属于 Angular 的特性。Angular 对于服务也没有什么定义,它甚至都没有定义服务的基类,也没有地方注册一个服务。

    这就像你在 iOS 或者 Android 里单独建了一个类叫 httpService ,封装了网络请求服务一样,不是具体的什么东西,就是一个概念了解下就行。

    在图中的意义:看图左下角角那一块,服务是用来封装可重用的业务逻辑。

    6.依赖注入 (dependency injection)

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

    比如我们要给某组件导入 HomeService 这个服务,看这段代码:

    constructor(private service: HeroService) { 
     ...
    }

    这个constructor就是构造函数,依赖注入在 constructor 中进行。你也许会觉得前面写上 private、public 之类的很怪,这是 TypeScript 语法比较特殊,习惯就好。

    当 Angular 创建组件时,会首先为组件所需的服务请求一个注入器 injector。我们必须先用注入器 injector 为 HeroService 注册一个提供商 provider。

    看一下下面的代码,意思就是我们必须在 providers 写上才能用

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

    相信看了本文案例你已经掌握了方法,更多精彩请关注php中文网其它相关文章!

    推荐阅读:

    JS的递归实现方法

    JS+canvas绘制饼状统计图

    优化页面加载速度插件InstantClick

    相关专题

    更多
    java
    java

    Java是一个通用术语,用于表示Java软件及其组件,包括“Java运行时环境 (JRE)”、“Java虚拟机 (JVM)”以及“插件”。php中文网还为大家带了Java相关下载资源、相关课程以及相关文章等内容,供大家免费下载使用。

    825

    2023.06.15

    java正则表达式语法
    java正则表达式语法

    java正则表达式语法是一种模式匹配工具,它非常有用,可以在处理文本和字符串时快速地查找、替换、验证和提取特定的模式和数据。本专题提供java正则表达式语法的相关文章、下载和专题,供大家免费下载体验。

    725

    2023.07.05

    java自学难吗
    java自学难吗

    Java自学并不难。Java语言相对于其他一些编程语言而言,有着较为简洁和易读的语法,本专题为大家提供java自学难吗相关的文章,大家可以免费体验。

    731

    2023.07.31

    java配置jdk环境变量
    java配置jdk环境变量

    Java是一种广泛使用的高级编程语言,用于开发各种类型的应用程序。为了能够在计算机上正确运行和编译Java代码,需要正确配置Java Development Kit(JDK)环境变量。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

    396

    2023.08.01

    java保留两位小数
    java保留两位小数

    Java是一种广泛应用于编程领域的高级编程语言。在Java中,保留两位小数是指在进行数值计算或输出时,限制小数部分只有两位有效数字,并将多余的位数进行四舍五入或截取。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

    398

    2023.08.02

    java基本数据类型
    java基本数据类型

    java基本数据类型有:1、byte;2、short;3、int;4、long;5、float;6、double;7、char;8、boolean。本专题为大家提供java基本数据类型的相关的文章、下载、课程内容,供大家免费下载体验。

    445

    2023.08.02

    java有什么用
    java有什么用

    java可以开发应用程序、移动应用、Web应用、企业级应用、嵌入式系统等方面。本专题为大家提供java有什么用的相关的文章、下载、课程内容,供大家免费下载体验。

    429

    2023.08.02

    java在线网站
    java在线网站

    Java在线网站是指提供Java编程学习、实践和交流平台的网络服务。近年来,随着Java语言在软件开发领域的广泛应用,越来越多的人对Java编程感兴趣,并希望能够通过在线网站来学习和提高自己的Java编程技能。php中文网给大家带来了相关的视频、教程以及文章,欢迎大家前来学习阅读和下载。

    16881

    2023.08.03

    php源码安装教程大全
    php源码安装教程大全

    本专题整合了php源码安装教程,阅读专题下面的文章了解更多详细内容。

    74

    2025.12.31

    热门下载

    更多
    网站特效
    /
    网站源码
    /
    网站素材
    /
    前端模板

    精品课程

    更多
    相关推荐
    /
    热门推荐
    /
    最新课程
    Vue.js:纪录片
    Vue.js:纪录片

    共1课时 | 0.2万人学习

    Angular js入门篇
    Angular js入门篇

    共17课时 | 3.5万人学习

    Go 教程
    Go 教程

    共32课时 | 3.2万人学习

    关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
    php中文网:公益在线php培训,帮助PHP学习者快速成长!
    关注服务号 技术交流群
    PHP中文网订阅号
    每天精选资源文章推送

    Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号