Angular 4.0的架构使用详解

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

前言

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

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

Angular架构概览

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

模块 (module)

组件 (component)

模板 (template)

元数据 (metadata)

数据绑定 (data binding)

指令 (dirctive)

服务 (service)

依赖注入 (dependency injection)

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

1.模块 (module)

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

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

//app.module.tsimport { 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 ]})

    登录后复制

    相信看了本文案例你已经掌握了方法,更多精彩请关注【创想鸟】其它相关文章!

    推荐阅读:

    JS的递归实现方法

    JS+canvas绘制饼状统计图

    优化页面加载速度插件InstantClick

    以上就是Angular 4.0的架构使用详解的详细内容,更多请关注【创想鸟】其它相关文章!

    版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

    发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2771141.html

    (0)
    上一篇 2025年3月8日 12:51:10
    下一篇 2025年3月8日 12:51:16

    AD推荐 黄金广告位招租... 更多推荐

    相关推荐

    • JS二叉搜索树使用详解

      这次给大家带来JS二叉搜索树使用详解,JS二叉搜索树使用的注意事项有哪些,下面就是实战案例,一起来看一下。 什么是二叉树 二叉树就是树的每个节点最多只能有两个子节点 什么是二叉搜索树 二叉搜索树在二叉树的基础上,多了一个条件,就是二叉树在插…

      编程技术 2025年3月8日
      200
    • vue+query传参步奏详解

      这次给大家带来vue+query传参步奏详解,vue+query传参的注意事项有哪些,下面就是实战案例,一起来看一下。 最近在学习Vue,本文介绍了vue params、query传参使用,分享给大家,也给自己留个笔记 声明式: 编程式:r…

      编程技术 2025年3月8日
      200
    • shiro授权实现详解

      这次给大家带来shiro授权实现详解,shiro授权实现的注意事项有哪些,下面就是实战案例,一起来看一下。 授权,也叫访问控制,即在应用中控制谁能访问哪些资源(如访问页面/编辑数据/页面操作等)。在授权中需了解的几个关键对象:主体(Subj…

      编程技术 2025年3月8日
      200
    • JS实现路由跳转步奏详解

      这次给大家带来JS实现路由跳转步奏详解,JS实现路由跳转的注意事项有哪些,下面就是实战案例,一起来看一下。 JS的是使用对很多人来说是非常频繁的,同时js也有着非常强大的制作效果。这次文章就给大家介绍下使用js实现路由跳转效果示例代码,希望…

      编程技术 2025年3月8日
      200
    • replace函数使用详解

      这次给大家带来replace函数使用详解,replace函数使用的注意事项有哪些,下面就是实战案例,一起来看一下。 replace方法的语法是:stringObj.replace(rgExp, replaceText) 其中stringOb…

      编程技术 2025年3月8日
      200
    • Django多数据库使用步奏详解

      这次给大家带来Django多数据库使用步奏详解,Django多数据库使用的注意事项有哪些,下面就是实战案例,一起来看一下。 1.在settings中设定DATABASE 比如要使用两个数据库: DATABASES = { ‘default’…

      编程技术 2025年3月8日
      200
    • js链表使用详解

      这次给大家带来js链表使用详解,js链表使用的注意事项有哪些,下面就是实战案例,一起来看一下。 如下所示: Document function Node(v){ this.value=v; this.next=null; } functio…

      编程技术 2025年3月8日
      200
    • js发布者订阅者模式使用详解

      这次给大家带来js发布者订阅者模式使用详解,js发布者订阅者模式使用的注意事项有哪些,下面就是实战案例,一起来看一下。 发布者订阅者模式,是一种很常见的模式,比如: 一、买卖房子 生活中的买房,卖房,中介就构成了一个发布订阅者模式,买房的人…

      编程技术 2025年3月8日
      200
    • jQuery实现计时器功能详解

      这次给大家带来jQuery实现计时器功能详解,jQuery实现计时器功能的注意事项有哪些,下面就是实战案例,一起来看一下。 在写项目的过程中遇到要前端60秒发送验证码的业务需求,于是用到计时器的功能: setInterval(functio…

      编程技术 2025年3月8日
      200
    • vuex+Actions使用详解

      这次给大家带来vuex+Actions使用详解,vuex+Actions使用的注意事项有哪些,下面就是实战案例,一起来看一下。 Action 提交的是 mutation,而不是直接变更状态. Action 是异步的,mutation是同步的…

      编程技术 2025年3月8日
      200

    发表回复

    登录后才能评论