Angular4.0从入门到实战打造在线竞拍网站学习笔记之四--数据绑定&管道
Angular4.0基础知识之组件
Angular4.0基础知识之路由
Angular4.0依赖注入
Angular4.0数据绑定&管道
数据绑定
数据绑定允许你将组件控制器的属性和方法与组件的模板连接起来,大大降低了开发时的编码量。
常见的表现形式有:
- 插值表达式:
<h1>{{title}}</h1>
,即把属性|表达式插入到HTML标签中 - 属性绑定:
<img [src]="imgUrl" />
,也就是将属性|表达式绑定到HTML标签的属性上 - 事件绑定:
<button (click)="show()"></button>
,讲组件控制器的一个方法绑定到模板元素的事件上
在Angular中,默认的数据绑定是单向的(AngularJS1.0中全部是双向绑定,这也是性能差的原因之一),所谓的双向绑定,也就是控制器的属性反映到模板中,同时,模板中显示出的属性被修改之后,对应的控制器属性同时发生变化;单向绑定取出了模板=>控制器的方向,使性能大大提升。(当然,双向绑定并不是被去掉了,你也可以手动指定使用双向绑定,双向绑定现在变成了一个可选项,而不是框架的默认行为)
事件绑定
<button (click)="doOnClick($event)"></button>
doOnClick(event:any){
console.log(event);
}
如上代码是一个经典的事件绑定例子,被绑定的事件可以是一个标准事件也可以是一个自定义事件,绑定的操作可以是控制器里的一个方法,也可以只一个赋值表达式等等。
属性绑定
如下例子所示
// 使用属性绑定
<img [src]="imgUrl" />
// 使用插值表达式
<img src="{{imgUrl}}" />
又是一个经典的例子,不难理解,上面两个方法实现的效果是完全一致的,事实上,这两个方法没有优劣之分,你只需要按照自己的喜好去选择即可
HTML属性绑定
- 基本HTMl属性绑定
<td [attr.colspan]="value"></td>
- class绑定
<div class="aaa bbb" [class]="val"></div> // 这种情况会覆盖原先的class
<div [class.aaa]="booleanVal"></div> // 通过一个Boolean值开关来控制是否启用某一个class名,适合管理单一class名
<div [ngClass]="{aaa:isA,bbb:isB}"></div> // 通过对象的形式开控制多个class的开关,适合同时管理多个className
- 样式绑定
和class绑定类似,只不过绑定的对象为style属性
<button [style.color]="isRed?'red':'green'">Red</button>
<div [ngStyle]="{color:red,'font-style':bool?'italic':'normal'}"></div>
双向绑定
双向绑定即视图和模型保持同步,无论视图和模型哪一方改变,另一方都一起同步改变。
前面所学到的事件绑定是从视图到模型,把模板中元素的事件绑定到控制器中的方法;属性绑定的方向是从控制器到模板,使用方括号讲组件控制器的属性绑定到模板。
<input [value]="name" (input)="doOnInput($event)" />
export class BindComponent implements OnInit {
name: string;
doOnInput(event){
this.name=event.target.value;
}
}
这样就实现了一个双向绑定,当input内容变化的时候,出发事件,修改模型中的属性值,当模型中的属性值改变的时候,优惠在视图中表现出来。
当然,Angular肯定提供了内置的双向绑定支持:
<input [(ngModel)]="name" />
由于[(ngModel)]
用在input元素上,默认绑定的是input
事件。双向绑定最常用的用途就是表单处理。
当然,双向绑定本来就应该用于input系列元素上,因为这些元素允许你去修改这些值,并显示出来。
将会在表单处理章节更详细讲。
管道
举个例子,例如我要在页面上显示我的生日信息,假设现在从服务器获取到的日期是一个Date对象,那么把它直接输出到页面上肯定是用户体验很不好的(一大串乱七八糟的字符串)。管道就是用来处理数据的,从原始值到你所需要的值,这一个过程。
使用实例:
<p>{{birthday | date | uppercase}}</p>
上面例子中我们就使用了两个内置的管道,第一个是获取到Date对象的日期信息,第二个是把小写字母转换成大写。
内置管道
常用的管道:
- uppercase 大写
- lowercase 小写
date日期管道
日期管道符可以接受参数,用来规定输出日期的格式。
<p>现在的时间是{{today | date:'yyyy-MM-dd HH:mm:ss'}}</p>
number 数字处理管道
接收的参数格式为{最少整数位数}.{最少小数位数}-{最多小数位数}
其中最少整数位数默认为1
最少小数位数默认为0
最多小数位数默认为3
当小数位数少于规定的{最少小数位数}时,会自动补0
当小数位数多于规定的{最多小数位数}时,会四舍五入
自定义管道
- 生成管道:
ng g pipe pipe/multiple
,此处用来做Demo的管道作用是扒一个数放大n倍,也就是乘法……
生成的管道代码:
import { Pipe, PipeTransform } from '@angular/core';
@Pipe({
name: 'multiple'
})
export class MultiplePipe implements PipeTransform {
transform(value: any, args?: any): any {
return null;
}
}
可以看出,管道是一个实现了PipeTransform并且带有@Pipe装饰器的类,用于把源数据根据参数和方法定义处理成想要的结果。
但是,当你打开
app.modules.ts
的时候,你会发现在declaration数组里多出来了一个MultiplePipe的声明,也就是说,管道也是需要声明的,只是命令行工具自动添加进去了。
其中value是管道前端的原始值,args是一个可选参数,也就是管道的参数,最终管道把处理结果返回出去即可。
如下,我们很轻易地创建了一个管道:
import {Pipe, PipeTransform} from '@angular/core';
@Pipe({
name: 'multiple'
})
export class MultiplePipe implements PipeTransform {
transform(value: number, args?: number): number {
if (!args) {
args = 1;
}
return value * args;
}
}
在实战项目中,我们对管道有了新的用法,根据传入的参数来过滤商品列表:
import {Pipe, PipeTransform} from '@angular/core';
import {Product} from '../shared/product.service';
@Pipe({
name: 'productFilter'
})
export class ProductFilterPipe implements PipeTransform {
transform(productList: Product[], filterField: string, keyword: string): any {
if (!filterField || !keyword) {
return productList;
}
return productList.filter((product: Product) => product[filterField].indexOf(keyword) >= 0);
}
}
Angular4.0从入门到实战打造在线竞拍网站学习笔记之四--数据绑定&管道的更多相关文章
- Angular4.0从入门到实战打造在线竞拍网站学习笔记之一--组件
Angular4.0基础知识之组件 Angular4.0基础知识之路由 Angular4.0依赖注入 Angular4.0数据绑定&管道 最近搞到手了一部Angular4的视频教程,这几天正好 ...
- Angular4.0从入门到实战打造在线竞拍网站学习笔记之三--依赖注入
Angular4.0基础知识之组件 Angular4.0基础知识之路由 依赖注入(Dependency Injection) 正常情况下,我们写的代码应该是这样子的: let product = ne ...
- Angular4.0从入门到实战打造在线竞拍网站学习笔记之二--路由
Angular4.0基础知识之组件 Angular4.0基础知识之路由 Angular4.0依赖注入 Angular4.0数据绑定&管道 路由 简介 接下来学习路由的相关知识 本来是不准备写下 ...
- Angular4.0学习笔记 从入门到实战打造在线竞拍网站学习笔记之二--路由
Angular4.0基础知识见上一篇博客 路由 简介 接下来学习路由的相关知识 本来是不准备写下去的,因为当时看视频学的时候感觉自己掌握的不错 ( 这是一个灰常不好的想法 ) ,过了一段时间才发现An ...
- Angular 4 学习笔记 从入门到实战 打造在线竞拍网站 基础知识 快速入门 个人感悟
最近搞到手了一部Angular4的视频教程,这几天正好有时间变学了一下,可以用来做一些前后端分离的网站,也可以直接去打包web app. 环境&版本信息声明 运行ng -v @angular/ ...
- Swoole入门到实战 打造高性能 赛事直播平台(完整版)
Thinkphp+Swoole入门到实战打造高性能赛事直播平台 第1章 课程介绍 欢迎大家来到swoole的课程!本章主要是介绍了swoole的一些特性,以及使用场景,并且分享了swoole在其他公司 ...
- swoole入门到实战打造高性能赛事直播平台☆
第1章 课程介绍 本章主要是介绍了swoole的一些特性,以及使用场景,并且分享了swoole在其他公司的一些案例,最后重点讲解了swoole学习的一些准备工作. 第2章 PHP 7 源码安装 本 ...
- 零基础入门Python实战:四周实现爬虫网站 Django项目视频教程
点击了解更多Python课程>>> 零基础入门Python实战:四周实现爬虫网站 Django项目视频教程 适用人群: 即将毕业的大学生,工资低工作重的白领,渴望崭露头角的职场新人, ...
- Angular 4.0从入门到实战
AngularJS 优点 模板功能强大丰富,并且是声明式的,自带了丰富的Angular指令: 是一个比较完善的前端MVC框架,包含模板,数据双向绑定,路由,模块化,服务,过滤器,依赖注入等所有功能: ...
随机推荐
- docker在windows,centos中的安装
centos安装方式,采用阿里云的镜像和安装脚本 或者到https://store.docker.com/search?type=edition&offering=community下载相应系 ...
- PHP数字价格格式化,保留两位小数
number_format(($v['cash']/100),2); demo=>9,271.15
- 学习Java绝对要懂的,Java编程中最常用的几种排序算法!
今天给大家分享一下Java中几种常见的排序算法的Java代码 推荐一下我的Java学习羊君前616,中959,最后444.把数字串联起来! ,群里有免费的学习视频和项目给大家练手.大神有空时也 ...
- 【Android Developers Training】 21. 创建一个可变动的UI
注:本文翻译自Google官方的Android Developers Training文档,译者技术一般,由于喜爱安卓而产生了翻译的念头,纯属个人兴趣爱好. 原文链接:http://developer ...
- H3C交换机删除VLAN与其绑定端口配置
在系统视图下,执行 undo int vlan 2 undo vlan 2 可以删除vlan2的配置信息. 执行 undo vlan all 可以删除所有的vlan信息. 在vlan2视图下,执行: ...
- mybatis学习笔记(四)-- 为实体类定义别名两种方法(基于xml映射)
下面示例在mybatis学习笔记(二)-- 使用mybatisUtil工具类体验基于xml和注解实现 Demo的基础上进行优化 以新增一个用户为例子,原UserMapper.xml配置如下: < ...
- mybatis学习笔记(二)-- 使用mybatisUtil工具类体验基于xml和注解实现
项目结构 基础入门可参考:mybatis学习笔记(一)-- 简单入门(附测试Demo详细过程) 开始体验 1.新建项目,新建类MybatisUtil.java,路径:src/util/Mybatis ...
- Tween 若干年后我尽然还要学数学 曲线到底是什么鬼啊
var Tween = { linear: function (t, b, c, d){ //匀速 return c*t/d + b; }, easeIn: function(t, b, c, d){ ...
- Unity-Shader-动态阴影(上) 投影的矩阵变换过程
[旧博客转移 - 2017年1月20日 01:20 ] 前面的话 最近很长时间没写博文了,一是太忙 ( lan ) 了,二是这段时间又领悟了一些东西,脑子里很混乱,不知道从何写起.但感觉不能再拖延下去 ...
- Maven部署(linux)
1.下载 进入http://maven.apache.org/download.cgi下载.或者使用wget命令. mkdir /opt/maven cd /opt/maven wget http:/ ...