Angular相比于vue来说,更像一个完整的框架,本身就集成了很多模块,如路由,HTTP,服务等,而vue是需要另外引入比如(vuex,axios等)。Angular引入了依赖注入、单元测试、类等后端概念,结合TS开发,加入类型管理机制,使前端代码也能严谨化,结构化。比起vue,angular更加适用于大型项目的开发与维护。

1、项目构建

// 属于全局安装,如果之前装过了,就不用多次执行该命令了~
npm install -g @angular/cli // 新建项目(routiong表示加入路由)
ng new my-app --routing // 进入项目
cd my-app // 安装插件
npm install (这里之前使用cnpm install 会卡在95%的地方) // 启动项目
ng serve // 设置不同的端口(默认端口4200)
ng serve --port 5001

2、绑定

属性绑定

  • DOM属性:当前值[property]="value",可变,优先使用;可以使用插值表达式双花括号替换
<!-- 模板代码 -->
<h4>插值表达式</h4>
<img src="{{imgUrl}}" alt=""> <h4>DOM属性绑定</h4>
<img [src]="imgUrl" alt="">
// ts代码
export class BindComponent implements OnInit {
imgUrl: string = "http://via.placeholder.com/300x100"
}

  • HTML绑定:初始值[attr.Attribute]="value",不可变,有的HTML属性没有对应的DOM属性,比如colspan,当没有DON属性的时候可使用;

  • CSS类绑定:全替换[class]="classValue",部分替换[class.className]="classValue"

<h4>class属性全绑定</h4>
<div [class]="allClass">黑玛鱼</div> <h4>class属性部分绑定</h4>
<div class="aa" [class.bb]="bbValue">黑玛鱼</div>
.aa {color: red;}
.bb {font-weight: bold;}
.cc {font-size: 50px;}
  // 字符串类型
allClass: string = 'aa bb cc';
// 布尔类型
bbValue: boolean = true;

指令绑定

  • ngFor:循环指令
<h4>ngFor</h4>
<ul>
<li *ngFor="let item of list;let i = index">
第{{i+1}}条:{{item}}
</li>
</ul>
  // 数组类型
list: string[] = ['我的前半生','精彩绝伦','我的后半生','依然绚烂']

  • ngIf:是否渲染dom元素
<h4>ngIf</h4>
<div>
<span *ngIf="show">我是显式的</span>
<span *ngIf="!show">我是隐式的</span>
</div>
 // 布尔类型
show:boolean = true;

  • ngClass:多类名显示
<h4>ngClass</h4>
<div class="aa" [ngClass]="{bb: bbValue}">Angular指令</div>

  • 事件绑定
<h4>事件绑定</h4>
<button (click)="todoClick()">点我</button>
    // 事件
todoClick(){
alert('点我干嘛?')
}

双向绑定

  • [(ngModel)]:常用于表单组件
<h4>双向绑定</h4>
<input type="text" [(ngModel)]="name">
<span>{{name}}</span>

这里注意,需要在app.module.ts引入表单模块FormsModule

管道

管道(过滤):负责将原始值转成显示值

名称 效果
date 日期的转换:date:'yyyy-MM-dd HH:mm:ss'
number 数字的转换:number:'2.1-4',保留2位整数,最少1个,最多4个
async 异步流
自定义 ng g pipe ...
<h4>管道</h4>
<span>今天是:{{today | date:"yyyy-MM-dd"}}</span>
  today: object = new Date()

投影

相当于vue的插槽,在ng中使用ng-content指令

  • 单个投影
<!-- 父组件模板 -->
<app-child>
<span>
两个人在一起 进步快的那个人总是会甩掉原地踏步的那个人 因为人的本能都是希望更多地探求生命生活的外延和内涵
</span>
</app-child>
<!-- app-child组件模板 -->
<h4>单个投影</h4>
<ng-content></ng-content>

  • 多个投影

    使用类class命名,使用select定位
<!-- 父组件模板 -->
<app-child>
<div class="ask">“下次见到她,你会怎么做?”</div>
<div class="answer">“打个招呼,或者,带她看大海”</div>
</app-child>
<!-- app-solt组件模板 -->
<h4>多个投影</h4>
朋友问:<ng-content select=".ask"></ng-content>
他说:<ng-content select=".answer"></ng-content>

3、生命周期

方法 作用
ngOnChanges 父组件在初始化或者在修改子组件的输入属性时被调用。引用类型改变,不触发,初始化输入属性
ngDoCheck 数变更检测(zone.js) 发生的时候被调用,很频繁的被调用,只要视图有变化都会触发
ngAfterViewInit 模板初始化时调用(一次)
ngAfterViewChecked 模板变化检测
ngAfterContentInit 插槽值初始化时调用(一次)
ngAfterContentChecked 对插槽内容的初始化和变更检测,在视图初始化之前调用。此时可以更改值
ngDestory 路由切换的时候,前一个组件销毁,后一个组件创建

4、父子组件通讯

组件创建:ng直接使用 ng g component 的命令创建组件,会自动生成组件所需的文件,方便快捷。

// 父组件
ng g component parent
// 子组件
ng g component parent/child

父->子(@Input())

使用 @Input() 让子组件知道哪个是输入的属性,对应vue中的props。

<h4>我是父组件</h4>
<input type="text" [(ngModel)]="tellchild">
<app-child [message]="tellchild"></app-child>
<h4>我是子组件</h4>
<div>父组件传来的数据是:{{message}}</div>
// 子组件ts,告诉组件,message是父组件传进来的
@Input() public message: string;

子->父 (@Output())

依赖EventEmitter事件发射器,将信息发射emit给子组件

<h4>我是子组件</h4>
<div>父组件传来的数据是:{{message}}</div>
<input type="text" [formControl]="childmessage">
// 使用FormControl对象,响应式表单需要引入ReactiveFormsModule模块
childmessage: FormControl = new FormControl(); // 输出属性,需要定义成事件
@Output() childtellEvent: EventEmitter<any> = new EventEmitter(); ngOnInit() {
this.childmessage.valueChanges.subscribe(msg => {
// 通过emit将信息发射出去
this.childtellEvent.emit(msg);
})
}
<h4>我是父组件</h4>
<input type="text" [(ngModel)]="tellchild">
<div>子组件传来的数据是:{{childmessage}}</div>
<!-- 事件绑定获取数据 -->
<app-child [message]="tellchild" (childtellEvent)="tellResult($event)"></app-child>

5、响应式编程

  • 可观察对象

    Angular集成了 参考:Rxjs,它使用 Observable 对象来创建流,主要是用于监听一组值或者事件的集合
// 创建流
// 值的创建
Observable.of([1,2,3,4]);
// 事件的创建
var button = document.querySelector('button');
Observable.fromEvent(button,'click')
  • 观察者

    不是对象,而是一个回调函数集合,它知道如何监听被 Observable 发送的值。通过订阅subscribe的方式观察可观察对象,取消订阅unsubscribe()
// 订阅流
Observable.from([1,2,3,4]).map(item =>{
item * item
}).subscribe(
// next检测
res => console.log(res), // error检测
err => console.log(err), // complete检测
() => console.log('it`s over')
)

Angular6 基础(数据绑定、生命周期、父子组件通讯、响应式编程)的更多相关文章

  1. vue基础-动态样式&表单绑定&vue响应式原理

    动态样式 作用:使用声明式变量来控制class和style的值 语法: :class/:style 注意:尽可能不要把动态class和静态class一起使用,原因动态class起作用的时间会比较晚,需 ...

  2. 【Vue】Vue中的父子组件通讯以及使用sync同步父子组件数据

    前言: 之前写过一篇文章<在不同场景下Vue组件间的数据交流>,但现在来看,其中关于“父子组件通信”的介绍仍有诸多缺漏或者不当之处, 正好这几天学习了关于用sync修饰符做父子组件数据双向 ...

  3. Angular组件——父子组件通讯

    Angular组件间通讯 组件树,1号是根组件AppComponent. 组件之间松耦合,组件之间知道的越少越好. 组件4里面点击按钮,触发组件5的初始化逻辑. 传统做法:在按钮4的点击事件里调用组件 ...

  4. java多线程(2)---生命周期、线程通讯

    java生命周期.线程通讯 一.生命周期 有关线程生命周期就要看下面这张图,围绕这张图讲解它的方法的含义,和不同方法间的区别.    1.yield()方法 yield()让当前正在运行的线程回到就绪 ...

  5. Angular4学习笔记(五)- 数据绑定、响应式编程和管道

    概念 Angular中的数据绑定指的是同一组件中控制器文件(.ts)与视图文件(.html)之间的数据传递. 分类 流向 单向绑定 它的意思是要么是ts文件为html文件赋值,要么相反. ts-> ...

  6. Angular : 响应式编程, 组件间通信, 表单

    Angular 响应式编程相关 ------------------------------------------------------------------------------------ ...

  7. Angular09 数据绑定、响应式编程、管道

    1 数据绑定的分类 1.1 单向数据绑定 1.1.1 属性绑定 -> 数据从组件控制类到组件模板 DOM属性绑定 HTML属性绑定 1.1.2 事件绑定 -> 数据从组件模板到组件控制类 ...

  8. WebFlux基础之响应式编程

    上篇文章,我们简单的了解了WebFlux的一些基础与背景,并通过示例来写了一个demo.我们知道WebFlux是响应式的web框架,其特点之一就是可以通过函数式编程方式配置route.另外究竟什么是响 ...

  9. 简简单单的Vue2(简单语法,生命周期,组件)

    既然选择了远方,便只顾风雨兼程! __HANS许 系列:零基础搭建前后端分离项目 系列:零基础搭建前后端分离项目 简单入手 组件 在上面文章,我们简单的讲了前端框架的工程化,也就是MVVM,还有特别聊 ...

随机推荐

  1. Puppet全面详解

    1.  概述 puppet是一个开源的软件自动化配置和部署工具,它使用简单且功能强大,正得到了越来越多地关注,现在很多大型IT公司均在使用puppet对集群中的软件进行管理和部署,如google利用p ...

  2. cnd 计费流量查询服务模块设计与实现

    一.cdn模块结构: 2.内部模块结构:

  3. 常用系统的伪静态规则列表(rewrite)

    以前在云虚拟机上,是在iis上配置伪静态.这次买的一个香港的空间,商家说把伪静态规则直接放在web下即可. 注意,所有规则放在一起可能会有冲突,只放置你需要的规则即可. #shopex4.8 Rewr ...

  4. 洛谷 P1579 哥德巴赫猜想(升级版)

    嗯... 这或许也算一道数论题吧... 题目链接:https://www.luogu.org/problemnew/show/P1579 这道题的说明好像只会扰乱人的思路....然后就是这道题的细节比 ...

  5. 洛谷P2800 又上锁妖塔

    放题解 题目传送门 放代码

  6. flask 的上下文管理

    Flask的上下文对象 Flask有两种Context(上下文),分别是 RequestContext 请求上下文 Request 请求的对象,封装了Http请求(environ)的内容 Sessio ...

  7. MBR为什么不支持3T硬盘

    MBR,全称为Master Boot Record,即硬盘的主引导记录.(是管理硬盘分区的一种模式.升级版是GPT) MBR保存在硬盘的第1个扇区(即硬盘的0柱面.0磁头.1扇区).它由三个部分组成, ...

  8. 【研究】XML外部实体注入(XXE)

    在正式发布的2017 OWAST Top10榜单中,出现了三种新威胁: A4:XML外部实体注入漏洞(XXE) A8:不安全的反序列化漏洞 A10:不足的记录和监控漏洞 验证XXE: 构造请求 < ...

  9. C语言实现排序

    //C语言版排序#include<stdio.h> #include<stdlib.h> //冒泡排序 void bubleSort(int data[], int n); / ...

  10. Redis在windows下的配置

    Redis在windows下的配置(在windows-64下安装redis,请参考微软redis的github:https://github.com/MSOpenTech/redis/releases ...