AngularJS2.0 开发指南

2023-10-26


经过前面的学习,基本了解了Angular2.0的使用,所有的Module都是一个Component,甚至一个事件响应也是一个Component,或者表单验证也可以是一个Component。

Angular的运作机制图

Angular2.0 API

添加Bootstrapping 组件

import {bootstrap} from 'angular2/angular2';

常见的模板语法

在Angular中 组件中的数据和Template中的表达式进行数据绑定,表达式可以是一个常量值 ,也可以是boolean表达式。

  1. <input [value]="firstName"> 绑定组件中的value属性到input的表达式firstName。

  2. <div [attr.role]="myAriaRole"> 绑定组件中对象的属性到html表达式myAriaRole

  3. <div [class.extra-sparkle]="hero === selectedHero"> ----当hero === selectedHero表达式为真时使用样式extra-sparkle。

  4. <div [style.width.px]="mySize"> 绑定样式的width属性到mysize(例如 10*20)表达式,单位是可选的。

  5. <button (click)="readRainbow($event)"> 绑定click事件,readRainbow($event)是组件中事件处理函数,$event是传入参数。

  6. <div title="Hello {{ponyName}}"> 将一个属性绑定到一个组件字符串变量 。

  7. <p>Hello {{ponyName}}</p> 将文本内容绑定到一个组件字符串变量

  8. <my-cmp [(title)]="name"> 设置双向数据绑定 相当于<my-cmp [title]="name" (titleChange)="name=$event">

  9. <video #movieplayer ...><button (click)="movieplayer.play()"></video>
    创建一个本地变量movieplaye 用于接收当前模板中的数据绑定和事件绑定表达式中的视频元素实例

  10. <p *myUnless="myExpression">...</p> *符号意味着将当前元素嵌入到模板myExpression中 ,等价于<template [myUnless]="myExpression"><p>...</p></template>

  11. <p>Card No.: {{cardNumber | myCreditCardNumberFormatter}}</p> 将表达式cardNumber的值用myCreditCardNumberFormatter格式化

  12. <p>Employer: {{employer?.companyName}}</p> "?"表示当employer没有定义或者为空时忽略。

内置指令

内置指令导入的方式:import {NgIf, ...} from 'angular2/common'

  1. <section *ngIf="showSection"> 根据表达式showSection删除或重新创建一个DOM树section元素

  2. <li *ngFor="#item of list"> 将li元素及其内容转为模板,并使用For循环显示列表中的每个项目。

  3. switch指令

    <div [ngSwitch]="conditionExpression">
    <template [ngSwitchWhen]="case1Exp">...</template>
    <template ngSwitchWhen="case2LiteralString">...</template>
    <template ngSwitchDefault>...</template>
    </div>

    根据表达式conditionExpression来判断嵌入哪个模板

  4. 选择样式指令

    <div [ngClass]="{active: isActive, disabled: isDisabled}">

    绑定一个存在的样式,右边map表达式运算结果例如这样{active: true, disabled: false}

表单指令

导入方式:import {FORM_DIRECTIVES} from 'angular2/common'

<input [(ngModel)]="userName"> 双向数据绑定。

类注解。

导入样式:import {Directive, ...} from 'angular2/core'

  1. 注解当前类为一个组件

    @Component({...})
    class MyComponent() {}
  2. 注解一个管道组件

    @Pipe({...})
    class MyPipe() {}
  3. 注解一个Injectable组件,Injectable组件一般是服务类组件,单例模式。

    @Injectable()
    class MyService() {}
    组件配置

1.作用于组件视图范围 依赖注入的一组provider组件。

viewProviders: [MyService, provide(...)]

2.组件的内联模板/外部模板视图。

     template: 'Hello {{name}}'
     templateUrl: 'my-component.html'

3.内联CSS样式/外部样式表的URL列表。

     styles: ['.primary {color: red}']
     styleUrls: ['my-component.css']

4.配置组件模板中使用的指令列表。

directives: [MyDirective, MyComponent]

5.配置组件的管道组件列表

pipes: [MyPipe, OtherPipe]

用于指令和组件类字段修饰符
  1. @Input() myProperty

    声明一个输入属性,属性是双向绑定

  2. @Output() myEvent = new EventEmitter()

    声明一个输出属性,绑定一个触发事件。

  3. @HostBinding('[class.valid]') isValid

    结合主元素的属性(例如CSS类有效)指令/组件的属性(如 isValid)。

  4. @HostListener('click', ['$event']) onClick(e) {...}

    监听主元素事件(如单击事件)通过指令/组件的方法(如onclick),可以传递一个参数($event)。

  5. @ContentChild(myPredicate) myChildComponent

    绑定组件的内容查询的第一个结果(mypredicate)到类属性:mychildcomponent

  6. @ContentChildren(myPredicate) myChildComponents

    绑定组件的所以查询内容(mypredicate)到类的mychildcomponent属性上。

  7. @ViewChild(myPredicate) myChildComponent

    绑定组件的视图查询的第一个结果(mypredicate)到类的mychildcomponent属性上。(对指令无效)。

  8. @ViewChildren(myPredicate) myChildComponents

    绑定组件的视图查询的所有结果(mypredicate)到类的mychildcomponent属性上。(对指令无效)。

指令和组件变化检测和生命周期钩
  1. constructor(myService: MyService, ...) { ... }

    在任何其他生命周期钩前,该类构造函数被调用。用它来注入依赖关系,为了避免任何发生错误。

  2. ngOnChanges(changeRecord) { ... }

    更改任何输入属性之后调用和在内容处理或者子视图之前调用

  3. ngOnInit() { ... }

    构造函数之后调用,初始化输入属性时调用,调用一次ngOnChanges。

  4. ngDoCheck() { ... }

    每次校验组件或者指令的输入属性是调用。使用它来执行一个自定义校验来扩展更改默认校验。

  5. ngAfterContentInit() { ... }

    当组件或指令的内容已经被初始化ngOnInit后调用。

  6. ngAfterContentChecked() { ... }

    当组件或指令的内容校验后调用

  7. ngAfterViewInit() { ... }

    当组件的视图已初始化,ngaftercontentinit方法后调用。仅适用于组件。

  8. ngAfterViewChecked() { ... }

    当组件的视图校验完成后调用。仅适用于组件。

  9. ngOnDestroy() { ... }

    在组件销毁之前调用一次。

依赖注入配置
  1. provide(MyService, {useClass: MyMockService})

    设置或用Class类型的组件MyMockService重写MyService类的provide配置。

  2. provide(MyService, {useFactory: myFactory})

    设置或用Factory模式的组件myFactory重写MyService的provide配置。

  3. provide(MyValue, {useValue: 41})

    设置或MyValue设置值为41。

路由与导航

指令导入方式:

import {RouteConfig, ROUTER_DIRECTIVES, ROUTER_PROVIDERS, ...} from 'angular2/router';
  1. 路由配置格式:

    @RouteConfig([
    { path: '/:myParam', component: MyComponent, as: 'MyCmp' },
    { path: '/staticPath', component: ..., as: ...},
    { path: '/*wildCardParam', component: ..., as: ...}
    ])
    class MyComponent() {}

    配置组件的路由。支持静态配置,参数配置,和通配符的路由配置。

  2. <router-outlet></router-outlet>

    使用当前组件激活的路由

  3. <a [routerLink]="[ '/MyCmp', {myParam: 'value' } ]">

    创建一个链接到一个不同的视图的,视图是基于路由指令组成的路由名称和可选参数。路由名称与配置路由的属性相匹配。以"/"为前缀表示从根路由访问,以"./"为前缀表示从子路由访问。

  4. @CanActivate(() => { ... })class MyComponent() {}

    在组件装饰中,定义一个函数,该函数用于向路由器确定是否应该激活该组件。返回一个布尔值或一个承诺。

  5. routerOnActivate(nextInstruction, prevInstruction) { ... }

    在访问到一个组件时,路由器调用组件的routerOnActivate方法(如果定义了)。

  6. routerCanReuse(nextInstruction, prevInstruction) { ... }

    路由器调用一个组件的routerCanReuse方法(如果定义了)来确定是否使用实例或销毁它并创建一个新的实例。应该返回一个布尔值或一个承诺。

  7. routerCanDeactivate(nextInstruction, prevInstruction) { ... }

    路由器调用每个组件的routerCanDeactivate方法(如果定义了),访问后将移除。如果所有这些方法返回的是true或者承诺,则表示访问已被处理。

  8. routerOnDeactivate(nextInstruction, prevInstruction) { ... }

    在该指令被删除作为路由改变的结果之前调用。可能会返回一个承诺,暂停删除指令,直到承诺解决。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

AngularJS2.0 开发指南 的相关文章

  • 【满分】【华为OD机试真题2023B卷 JS】矩阵最大值

    华为OD2023 B卷 机试题库全覆盖 刷题指南点这里 矩阵最大值 知识点矩阵数组 时间限制 1s 空间限制 32MB 限定语言 不限 题目描述 给定一个仅包含0和1的N N二维矩阵 请计算二维矩阵的最大值 计算规则如下 1 每行元素按下标
  • startx analyze

    1 xinit 在说明startx之前 我想我们应该先了解一下xinit 因为startx就是通过调用xinit启动X的 1 1 功能 当我们安装了Ubuntu后 默认就已经安装了xinit 它位于 usr bin下 xinit是一个二进制

随机推荐

  • RabbitMQ(四)消息Ack确认机制

    RabbitMQ 四 消息Ack确认机制 确认种类 RabbitMQ的消息确认有两种 消息发送确认 这种是用来确认生产者将消息发送给交换器 交换器传递给队列的过程中 消息是否成功投递 发送确认分为两步 一是确认是否到达交换器 二是确认是否到
  • AS 从SVN转向Git

    之前的项目都是用SVN 感觉SVN 还是挺不错的 但接触了Git后 才发现长江后浪推前浪 前浪死在沙滩上 果断抛弃了SVN 转向git的怀抱 虽然遇到了很多问题 但在同事的帮助下 至少能上传和check了 之后遇到git上的问题后 在写文章
  • js从数组中提取自己所需的数据

    1 场景一 人员选择相关问题 场景一 从人员选择数据中 提取已选的人员信息 selectedList为已选择的人员信息 只有id groupInfo接口返回的原始数据 所有人员信息 需要找出已选择的人员信息的具体信息 const group
  • 使用RBAC模型构建动态路由权限,交由前端动态渲染路由。

    根据RBAC模型生成动态路由并交给前端渲染 什么是RBAC模型 简单的RBAC模型数据库设计 后端处理动态的路由表信息 前端渲染路由的细节与注意 什么是RBAC模型 RBAC Role Based Access Control 模型是一种访
  • C++0基础教程

    还在苦恼找不到C 的教程吗 这篇文章搞定C 基础内容 前言 C 是一门编译型语言 是面向对象的 C 对语法的要求较高 且记忆量较大 但其运行速度较快 且编译过后是 exe的文件 可以直接运行 因此深受青睐 目录 前言 准备工作 C 源码文件
  • Chap3_数据预处理

    数据预处理 什么是数据预处理 数据分析算法的设计与选择需要考虑被处理数据的特征 数据质量过低或数据的形态不符合算法需求时 需要进行数据预处理工作 数据预处理是指对数据进行正式处理 计算 之前 根据后续数据计算的需求对原始数据集进行审计 清洗
  • 数据仓库建设及数据治理总结

    在谈数仓之前 先来看下面几个问题 数仓为什么要分层 用空间换时间 通过大量的预处理来提升应用系统的用户体验 效率 因此数据仓库会存在大量冗余的数据 不分层的话 如果源业务系统的业务规则发生变化将会影响整个数据清洗过程 工作量巨大 通过数据分
  • python使用 itchat结合图灵微信群机器人回复源码

    突然来了下兴致 又弄了个前几个月弄的微信群机器人 功能有好友之间的回复 群艾特后的回复 下面是源码 有更多的请看其他博文 coding utf 8 Time 2018 11 5 12 17 Author 蛇崽 Email 643435675
  • Qt::WindowFlags

    查了些资料 整理了一下 以备查询 枚举类型 Qt WindowFlags低位的一个字节用于定义窗口部件的窗口类型 Qt WindowFlags的高位字节定义了窗口提示 窗口提示能够进行位或操作 例如 Qt WindowContextHelp
  • K210学习篇(八)在MaixHub训练模型

    前言 本文着重于如何使用K210拍摄图片 并将图片上传到MaixHub平台进行模型训练 补充一下一些经验心得 比如一些训练参数的设置 在我们训练模型之前 我们需要获取一些数据集 其实也就是需要识别的物体图片 这里记得我们在获取数据集的时候
  • 获取shell返回值

    提示 文章写完后 目录可以自动生成 如何生成可参考右边的帮助文档 文章目录 前言 一 使用command 二 使用function 总结 前言 shell获取返回值的方法有多种 这里介绍两种 第一种是直接执行command然后获取返回值 第
  • js歌词滚动效果

    目录 效果图展示 一 素材准备 1 歌词数据data js 借鉴了网上copy下来的歌词模板 2 图片准备 设置title效果 3 音频文件准备 二 html块 拓展 标签属性 三 设置scss样式 四 逻辑js块 拓展 使用到的audio
  • 史蒂夫科恩_科特琳·科恩范围

    史蒂夫科恩 学习Android开发 Learning Android Development If you are familiar with Dagger 2 you probably know that Scope an importa
  • STM32-I2C --- 通过IO口模拟

    I2C 通过IO口模拟 1 I2C介绍 I2C两根线 一根时钟线 SCL 一根信号线 SDA 数据传输时 时钟线信号为低电平时 数据线电平才允许变化 起始和停止位控制时 时钟线信号为高电平 数据线由高向低变化为起始信号 数据线由低向高变化为
  • NOT 函数

    前言 NOT 函数是用于对参数值求反的一种 Excel 函数 当要确保一个值不等于某一特定值时 可以使用 NOT 函数 简言之 就是当参数值为 TRUE 时 NOT 函数返回的结果恰与之相反 结果为 FALSE 比如 NOT 2 2 4 由
  • stm32-看门狗(独立看门狗,窗口看门狗)

    基于野火教程的看门狗 实验器材 stm32c8t6 LED灯 按键一个 实验一 独立看门狗 1 实验原理 2 实验代码讲解 3 实验现象 实验二 窗口看门狗 1 实验原理 2 实验代码讲解 3 实验现象 在进入正题之前 我们先了解一下什么是
  • Flutter组件 - Expanded

    Row Column Flex会被Expanded撑开 充满主轴可用空间 使用方式 Row children
  • C# 获得配置文件存储目录

    在C 中 不同工程为了读取自己的配置文件 由于系统当前目录的问题 往往在不同情况下 使用不同的方法 下面对在什么时候 使用什么方法 做一个整理 一下方法很多是引用别人信息 情况1 如果是一个标准的Win独立应用 或者一个标准的WEB独立应用
  • [Ubuntu]深度学习环境安装NVIDIA-1080+CUDA9.0+cuDnn+Tensorflow-gpu-1.6.0+conda

    1 安装Miniconda wget https mirrors tuna tsinghua edu cn anaconda miniconda Miniconda 1 6 0 Linux x86 64 sh bash Miniconda
  • AngularJS2.0 开发指南

    经过前面的学习 基本了解了Angular2 0的使用 所有的Module都是一个Component 甚至一个事件响应也是一个Component 或者表单验证也可以是一个Component Angular的运作机制图 Angular2 0 A