当前位置: 首页 > 编程日记 > 正文

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属性绑定

  1. 基本HTMl属性绑定
<td [attr.colspan]="value"></td>
  1. 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
  1. 样式绑定

和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
当小数位数多于规定的{最多小数位数}时,会四舍五入

自定义管道

  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

相关文章:

给GridView增加求和行

1、在WebForm窗体中&#xff0c;设置GridView的ShowFooter"True" 2、在后台代码中 private int jhrs0,ybrs0;//定义变量 protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e) { if (e.Row.RowIndex > 0) { jhrs Convert.ToInt16(e.Ro…

phpMyAdmin 数据库添加int类型的值时默认设为唯一主键的问题解决

数据库的表中插入了一条数据&#xff0c;再插入数据就插入不进去。 这是我今天在开发数据库的时候&#xff0c;遇到一个问题&#xff0c;经过排查&#xff0c;是数据库的结构有问题&#xff0c;有字段是唯一数据&#xff0c;但是目前还不想设置它的值。 场景环境描述&#xff…

python 类中定义类_Python中的动态类定义

python 类中定义类Here’s a neat Python trick you might just find useful one day. Let’s look at how you can dynamically define classes, and create instances of them as required.这是一个整洁的Python技巧&#xff0c;有一天可能会有用。 让我们看一下如何动态定义…

用自定义方法,传入成绩数组,实现输出考试成绩的成三名

package com.imooc; import java.util.Arrays; //导入Array类包 import java.util.Scanner; //导入Scanner类包 public class Final2 { public static void main(String args[]){Scanner…

EJS 什么是EJS后缀文件 EJS怎么用

一、什么是EJS EJS是一个JavaScript模板库&#xff0c;用来从JSON数据中生成HTML字符串。 二、为什么要使用EJS 与最初的JavaScript相比较&#xff0c;一些不太了解你的代码的人可以更容易地通过EJS模板代码看得懂你的代码。 让我们放松一下&#xff0c;一起来享受下令人激动的…

一个推荐系统,实现完整的设计-在百度搜索关键词推荐案例

在之前一篇博文中&#xff0c; 有同学在评论中问了个问题&#xff1a; 怎样解决因式分解带来的推荐冷门。热门关键词的问题。 在回答这个问题的时候&#xff0c; 想到了近几年在做搜索推荐系统的过程中&#xff0c; 学术界和工业界的一些差别。 正好近期正在做技术规划&#xf…

如何充分利用JavaScript(ES6)中的解构功能

by Joanna Gaudyn乔安娜高登(Joanna Gaudyn) Destructuring was a new addition to ES6. It took inspiration from languages like Python and allows you to extract data from arrays and objects into distinct variables. It might sound like something you’ve done in…

React 开发环境搭建

先来一个 React 官方文档的链接 点击跳转 搭建 React 的前期准备&#xff1a;你的本地环境需要安装 cnpm、node。 注&#xff1a;代码块中的 $ 代表&#xff1a; $后面是在命令行输入的命令&#xff0c;举例 $ npm start 解&#xff1a;实际上是应该打开命令行输入 npm st…

c++中的友元重载

1 语法 返回值类型 operator 运算符名称(形参列表) { 重载实体 } --------->operator和运算符名称在一起构造成新的函数名 2 案例 1 #include <iostream>2 3 using namespace std;4 5 class Complex6 {7 public:8 9 Complex(float x0,float y0) 10 :_…

WPF解析TTF 字体

偶遇需要自己解析 TTF 字体并显示&#xff0c;此做。。。 using System; using System.Collections.Generic; using System.Drawing.Text; using System.IO; using System.Linq; using System.Runtime.Serialization; using System.Text; using System.Windows; using System.W…

redux logic_Redux-Logic简介

redux logicby Sam Ollason通过萨姆奥拉森(Sam Ollason) Redux-Logic简介 (An Introduction to Redux-Logic) This article will go through a high-level overview of Redux-Logic. We will look at what is it, why it is needed, how it differs from other Redux middlewa…

[SDOI2009]HH的项链

题目背景 无 题目描述 HH 有一串由各种漂亮的贝壳组成的项链。HH 相信不同的贝壳会带来好运&#xff0c;所以每次散步完后&#xff0c;他都会随意取出一段贝壳&#xff0c;思考它们所表达的含义。HH 不断地收集新的贝壳&#xff0c;因此&#xff0c;他的项链变得越来越长。有一…

DvaJS 入门, 快速上手Dva

为什么要使用Dva? React 没有解决的问题 React 本身只是一个 DOM 的抽象层&#xff0c;使用组件构建虚拟 DOM。 如果开发大应用&#xff0c;还需要解决一个问题。 通信&#xff1a;组件之间如何通信&#xff1f;数据流&#xff1a;数据如何和视图串联起来&#xff1f;路由…

Static、DynamicResource学习笔记一

定义了资源后&#xff0c;我们可以在元素中直接使用该资源&#xff0c;但又分为StaticResource及DynamicResource两种方式。 StaticResource 静态资源在首次创建窗口时一次性的设置完毕&#xff0c;之后源资源对象本身发生的任何变化都会影响到使用该资源的元素&#xff0c;如果…

javascript迭代器_JavaScript迭代器概述

javascript迭代器by Joanna Gaudyn乔安娜高登(Joanna Gaudyn) JavaScript迭代器概述 (An overview of JavaScript iterators) for&#xff0c;for…in和for…of循环之间的区别 (The difference between for, for…in and for…of loops) Iteration might be one of the most c…

knockout学习笔记目录

关于knockout学习系列的文章已经写完&#xff0c;这里主要是做个总结&#xff0c;并且将目录罗列出来&#xff0c;方便查看。欢迎各位大神拍砖和讨论。 总结 kncokout是一个轻量级的UI类库&#xff0c;通过MVVM模式使前端的UI简单话&#xff0c;减少javascript代码的编写。通常…

ant Design Pro 登录状态管理

未登录自动跳转到登录页面&#xff0c;登录成功不跳转回登录页面的实现代码调用流程。 ant Design Pro 是一个企业中后台管理框架&#xff0c;开始做他&#xff0c;第一个肯定是要做登录&#xff0c;下面来看一下它是怎么登录的。 先看路由配置 Authorized.jsx代码&#xff1…

初级java开发学习路线_成为初级全栈Web开发人员的10分钟路线图

初级java开发学习路线So you have started your journey into the world of web development. But what do you learn first? The Internet is overloaded with a wealth of information about the millions of different technologies that a web developer can know.因此&am…

国外物联网平台初探(四):Ayla Networks

定位 Ayla企业软件解决方案为全球部署互联产品提供强大的工具 功能 Ayla的IoT平台包含3个主要组成部分&#xff1a; (1) Ayla嵌入式代理Ayla Embedded Agents (2) Ayla云服务Ayla Cloud Services (3) Ayla应用库Ayla Application Libraries 设备 开发者使用任何微控制器、操作系…

《英语语法新思维初级教程》学习笔记(一)名词短语

参考资料&#xff1a; 1. 《英语语法新思维初级教程》 ▶ 知识点 ▼ 英语是“固定词序语言&#xff08;a fixed-word-order language&#xff09;”。 ▼ 语言的构造级别分五个层次&#xff1a;1. 词&#xff08;word&#xff09;&#xff1b;2. 短语&#xff08;phase&#xf…

根据数组中对象的属性值排序倒叙

数组中对象的属性值排序倒叙demo function compare(e) {return function (a, b) {var value1 a[e];var value2 b[e];return parseInt(value1) - parseInt(value2);} } var arr[{a:2},{a:3},{a:1}];var arr2 arr.sort(compare(time)).reverse();console.log(arr2) //[{a:3}…

!! javascript_产量! 产量! 生成器如何在JavaScript中工作。

!! javascriptby Ashay Mandwarya ?️??由Ashay Mandwarya提供吗&#xff1f; 产量&#xff01; 产量&#xff01; 生成器如何在JavaScript中工作。 (Yield! Yield! How Generators work in JavaScript.) If the title doesn’t already give a hint, we will be discussin…

ACM 竞赛高校联盟 练习赛 第二场 BC

B. 题解&#xff1a; 枚举约数即可&#xff0c;判断n个数能否填约数的整数倍 #include <iostream> #include <cstring> #include <cstdio> using namespace std; typedef long long LL; int main(){LL T, n, m;cin>>T;while(T--){cin>>n>>…

在一个数组中查找两个重复出现的数字

题目如下&#xff1a;现有一个数组长度为n1&#xff0c;里面存放有1到n-2&#xff0c;顺序不定&#xff0c;其中有两个数字出现了两次&#xff0c;现在要找出那两个数字。 例子A{2, 3, 1, 4, 5, 2, 4}&#xff0c; 这个数组长度为7&#xff0c;存放了1到5&#xff0c;但2和4出现…

React 组件生命周期

组件的生命周期可分成三个状态&#xff1a; Mounting&#xff1a;已插入真实 DOMUpdating&#xff1a;正在被重新渲染Unmounting&#xff1a;已移出真实 DOM 生命周期的方法有&#xff1a; componentWillMount 在渲染前调用,在客户端也在服务端。 componentDidMount : 在第一…

银行软件开发实习生_如何找到学生的软件开发人员实习生

银行软件开发实习生by Grazietta Hof由Grazietta Hof 如何找到学生的软件开发人员实习生 (How to find a Software Developer Internship as a student) Side note: Although this article is directed at students (because I am one so I can easily relate), I’m sure a l…

MAC OS X El CAPITAN 搭建SPRING MVC (1)- 目录、包名、创建web.xml

一、 下载STS&#xff08;Spring Tool Suite&#xff09; 官方地址&#xff1a;http://spring.io/tools/sts 下载spring tool suite for mac 最新版本。这个IDE是很不错的&#xff0c;其中spring插件已经配置好了。下载解压缩&#xff08;一定要英文目录下&#xff09;&#xf…

iOS小知识点记录

1>UITextField实现leftView: self.inputTextField [[UITextField alloc]initWithFrame:CGRectMake(10, 10, 200, 25)];self.inputTextField.delegate self;self.inputTextField.font [UIFont systemFontOfSize:15];self.inputTextField.placeholder " 想说点什么?…

Ant Design Pro 网络请求,视图绑定model并且渲染到页面 umi-request

封装网络请求,在service中新建接口,在model调用service,在视图绑定model并且得到网络请求的回调函数,获取网络请求的数据渲染到页面。 网络请求数据走向; 1.在utils/request.js 封装网络请求; /*** request 网络请求工具* 更详细的 api 文档: https://github.com/umijs…

2019机器学习比赛_2019顶尖的机器学习课程

2019机器学习比赛With strong roots in statistics, Machine Learning is becoming one of the most interesting and fast-paced computer science fields to work in. There’s an endless supply of industries and applications machine learning can be applied to to mak…