首页 > Angular4.0从入门到实战打造在线竞拍网站学习笔记之四--数据绑定管道

Angular4.0从入门到实战打造在线竞拍网站学习笔记之四--数据绑定管道

Angular4.0基础知识之组件

Angular4.0基础知识之路由

Angular4.0依赖注入

Angular4.0数据绑定&管道

数据绑定

数据绑定允许你将组件控制器的属性和方法与组件的模板连接起来,大大降低了开发时的编码量。

常见的表现形式有:

  • 插值表达式:

    { {title}}

    ,即把属性|表达式插入到HTML标签中
  • 属性绑定:,也就是将属性|表达式绑定到HTML标签的属性上
  • 事件绑定:,讲组件控制器的一个方法绑定到模板元素的事件上

在Angular中,默认的数据绑定是单向的(AngularJS1.0中全部是双向绑定,这也是性能差的原因之一),所谓的双向绑定,也就是控制器的属性反映到模板中,同时,模板中显示出的属性被修改之后,对应的控制器属性同时发生变化;单向绑定取出了模板=>控制器的方向,使性能大大提升。(当然,双向绑定并不是被去掉了,你也可以手动指定使用双向绑定,双向绑定现在变成了一个可选项,而不是框架的默认行为)

事件绑定

doOnClick(event:any){console.log(event);
}

如上代码是一个经典的事件绑定例子,被绑定的事件可以是一个标准事件也可以是一个自定义事件,绑定的操作可以是控制器里的一个方法,也可以只一个赋值表达式等等。

属性绑定

如下例子所示

// 使用属性绑定

// 使用插值表达式

又是一个经典的例子,不难理解,上面两个方法实现的效果是完全一致的,事实上,这两个方法没有优劣之分,你只需要按照自己的喜好去选择即可

HTML属性绑定

  1. 基本HTMl属性绑定
  1. class绑定
// 这种情况会覆盖原先的class
// 通过一个Boolean值开关来控制是否启用某一个class名,适合管理单一class名
// 通过对象的形式开控制多个class的开关,适合同时管理多个className
  1. 样式绑定

和class绑定类似,只不过绑定的对象为style属性


双向绑定

双向绑定即视图和模型保持同步,无论视图和模型哪一方改变,另一方都一起同步改变。

前面所学到的事件绑定是从视图到模型,把模板中元素的事件绑定到控制器中的方法;属性绑定的方向是从控制器到模板,使用方括号讲组件控制器的属性绑定到模板。

export class BindComponent implements OnInit {name: string;doOnInput(event){this.name=event.target.value;}
}

这样就实现了一个双向绑定,当input内容变化的时候,出发事件,修改模型中的属性值,当模型中的属性值改变的时候,优惠在视图中表现出来。

当然,Angular肯定提供了内置的双向绑定支持:

由于[(ngModel)]用在input元素上,默认绑定的是input事件。双向绑定最常用的用途就是表单处理。

当然,双向绑定本来就应该用于input系列元素上,因为这些元素允许你去修改这些值,并显示出来。

将会在表单处理章节更详细讲。

管道

举个例子,例如我要在页面上显示我的生日信息,假设现在从服务器获取到的日期是一个Date对象,那么把它直接输出到页面上肯定是用户体验很不好的(一大串乱七八糟的字符串)。管道就是用来处理数据的,从原始值到你所需要的值,这一个过程。

使用实例:

{ {birthday | date | uppercase}}

上面例子中我们就使用了两个内置的管道,第一个是获取到Date对象的日期信息,第二个是把小写字母转换成大写。

内置管道

常用的管道:

  • uppercase 大写
  • lowercase 小写

date日期管道

日期管道符可以接受参数,用来规定输出日期的格式。

现在的时间是{ {today | date:'yyyy-MM-dd HH:mm:ss'}}

number 数字处理管道

接收的参数格式为{最少整数位数}.{最少小数位数}-{最多小数位数}

其中最少整数位数默认为1

最少小数位数默认为0

最多小数位数默认为3

当小数位数少于规定的{最少小数位数}时,会自动补0

当小数位数多于规定的{最多小数位数}时,会四舍五入

自定义管道

  1. 生成管道: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);}}

转载于:https://www.cnblogs.com/wxjblog/p/7277655.html

更多相关:

  • mixamo网站FBX模型带骨骼绑定动作库,unity游戏各职业人物动画,兼容3dmax maya c4d iclone blender等主流3D软件 mixamo游戏3D模型带骨骼绑定FBX动作库 大小解压后:17.2G 素材获取:mixamo网站FBX模型带骨骼绑定动作库-云桥网  ...

  • WPF数据绑定为应用程序提供了一种表示数据和与数据交互的简单而又一致的方法。元素能够以公共语言运行库 (CLR) 对象和 XML 的形式绑定到各种数据源中的数据。 一、数据绑定的基本概念: 数据绑定涉及到两个方面:一个是绑定源,再一个是绑定目标。绑定源即控件绑定所使用的源数据,绑定目标即数据显示的控件。 1、对于绑定源,在WPF可以是...

  • 新建管道:   ​​​​​​​ng g pipe pipes/money或​​​​​​​ng g p pipes/money pipes/money.pipe.ts,同时在父级module.ts加入import { MoneyPipe } from './pipes/money.pipe'; @NgModule({  decla...

  • 文章目录通过管道同步进程实现代码管道缓冲区设置缓冲区大小总结 :pipe的特点 通过管道同步进程 管道自带同步互斥机制: 管道的内核实现:fs/pipe.c ,主要通过内核的锁以及等待队列等机制实现 管道的write操作会阻塞进程 当内存缓冲区已满或被读进程锁定,会阻塞write操作当所有数据被写入管道时write操作才会结...

  • 几个术语 二义性:当我们往一个管道里面写端写数据的时候,比如写一个hello的时候,当我们写到he的时候,读端就已经开始读取数据了,所以这是不对的,这就是二义性临界资源:多个流可以访问的一个共同的存储资源临界区:访问临界资源的代码叫做临界区互斥:任一时候只能有一个进程利用临界资源访问临界区,并且是以原子性访问原子性:要么访问,要么没...

  • 文档树Document Object Model (DOM) 为文档对象模型, 它使用对象的表示方式来表示对应的文档结构及其中的内容。下面为一个样例 p 元素在文档中的对象所包含的所有属性。控制台:p#domaccessKey: ""align: ""assignedSlot: nullattributeStyleMap: Style...

  • 1、封装 什么是封装?   1.对外部隐藏内部的属性,以及实现细节,给外部提供使用的接口     注意:封装有隐藏的意思,但不是单纯的隐藏     学习封装的目的:就是为了能够限制外界对内部数据的访问   python中属性的权限分为两种:   1.公开的     没有任何限制,谁都可以访问   2.私有的     只有当前类本身能狗...

  • jquery:js框架; 主要区别在dom的操作 jq需要引入文件并且引入顺序在最上面; 找元素 操作元素 js:doucument.getElementById..classname,tagname,name jq:$(选择器) dom是js对象 jqDom是jquery对象 操作内容 js:dom.innerHTML(非表单元素)...

  • Mock.js 的语法规范包括两部分: 数据模板定义规范(Data Template Definition,DTD)数据占位符定义规范(Data Placeholder Definition,DPD)1.数据模板定义规范 DTD 数据模板中的每个属性由 3 部分构成:属性名、生成规则、属性值: // 属性名 name // 生...

  • vue   vue.js 是用于构建交互式的 Web 界面的库。它提供了 MVVM 数据绑定和一个可组合的组件系统,具有简单、灵活的 API。从技术上讲, Vue.js 集中在 MVVM 模式上的视图模型层,并通过双向数据绑定连接视图和模型。实际的 DOM 操作和输出格式被抽象出来成指令和过滤器。相比其它的 MVVM 框架,Vue.j...