5.揭秘angular2学习 ------- 管道

2023-10-31

管道简介

管道是什么?

Angular的管道可以看作成是一个数据格式化展示的工具。管道可以将数据格式化显示,而不改变源数据。比如关于日期的展示,对于源数据使用管道1可以以yyyy/MM/dd来展示,也可以使用管道2展示成Feb 28, 2017的形式。但原数据依然是date,并没有改变。利用管道我们可以将数据格式化的内容剥离出来,使之独立,有需要格式化展示的时候选择相应的管道进行处理即可。

如何使用

在Angular中需要使用管道操作符“|”来使用管道。形式如:

{{ 输入数据 | 管道 : 管道参数 }}
template: `
    <p>My birthday is {{ birthday | date: "MM/dd/y" }}
`
...
export class PipeDemoComponent {
    birthday = new Date(1993, 3, 15);
}

链式管道

管道可以像jQuery一样链式使用。

{{ data | Pipe1 | Pipe2 | Pipe3 | ... }}

表达式从左至右求值,date先通过Pipe1处理后将处理后的数据作为输入数据再进行Pipe2的处理,以此类推,直到所有管道都已执行完毕。

这种链式调用的方式可以展示更丰富更复杂的数据。

Angular内置管道

先说个题外话,学习到这里也总结出了一点Angular的规律,不知道各位看官发现没有:Angular2框架虽然看起来比较庞大,但是其支持的内容全是全面。比如我们现在学的管道与之前学的表单,以及将来要学习的指令等,Angular都会内置一些常用的,然后还支持自定义扩展,我很喜欢这种方式。题外话完毕。

Angualr封装了一些常用的内置管道。内置管道可以直接在任何模版表达式中使用,不需要通过import导入和在模块中声明。

Angular内置管道整理如图:

管道 类型 功能
DatePipe 纯管道 日期管道,格式化日期
JsonPipe 非纯管道 将输入数据对象经过JSON.stringify()方法转换后输出对象的字符串
UpperCasePipe 纯管道 将文本所有小写字母转换成大写字母
LowerCasePipe 纯管道 将文本所有大写字母转换成小写字母
DecimalPipe 纯管道 将数值按特定的格式显示文本
CurrentcyPipe 纯管道 将数值转百分比格式
SlicePipe 非纯管道 将数组或者字符串裁剪成新子集

下面会分别讲解每一个管道的用法。

DatePipe

关键词:日期
DatePipe用来格式化日期数据,使用方法如下:

expression | date: format
  1. expression可以是
    • Date日期对象
    • 日期字符串,如”2016/04/05”
    • 毫秒级时间戳
  2. format自定义日期格式如下表(取2016-06-08 20:05:08时间为例)
日期 标志符 缩写 全称 单标志符 双标志符
地区 G G(AD) GGGG(Anno Domini) - -
y - - y(2016) yy(16)
M MMM(Jun) MMMM(June) M(6) MM(06)
d - - d(8) dd(08)
星期 E EEE(Fri) EEEE(Friday) - -
时间(AM,PM) j - - j(8 PM) jj(08 PM)
12小时制时间 h - - h(8) hh(08)
24小时制时间 H - - H(20) HH(20)
m - - m(5) mm(05)
s - - s(8) ss(08)
时区 Z - Z(china Standard Time) - -
时区 z z(GMT-8:00) - - -

下面看例子:

@Component({
    selector: 'pipe-demo-date',
    template: `
        <p>{{date|date: "y-MM-dd EEEE"}}</p>
    `
})
export class PipeDemoDateComponent {
    date:Date = new Date('2016-06-08 20:05:08');
}

输出结果为

2016-06-08 Wednesday

JsonPipe

关键词:Json
JsonPipe管道通过JSON.stringify()来将输入数据对象转换成对象字符串,该管道主要用于开发调试:

@Component({
    selector: 'pipe-demo-json',
    template: `
        <pre>{{jsonObject | json}}</pre>
    `
})
export class PipeDemJsonComponent {
    jsonObject: Object = {foo: 'bar', baz: 'qux', nested: {xyz: 3, numbers: [1, 2]}};
}

输出结果为:

//json
{
    "foo": "bar",
    "baz": "qux",
    "nested": {
        "xyz": 3,
        "numbers": [
            1,
            2
        ]
    }
}

UpperCasePipe

UpperCasePipe管道用于将文本中所有小写字母转换成大写字母。
语法格式:

expression | uppercase

LowerCasePipe

LowerCasePipe管道用于将文本中所有大写字母转换成小写字母。
语法格式:

expression | lowercase

DecimalPipe

关键词:数值位数
DecimalPipe管道用于对数值的整数与小数部分按照指定规则进行格式化,这种格式化方式也成为本地格式化处理,语法如下:

expression | number[:digitInfo]

参数digitInfo的格式如下:

{minIntegerDigits}.{minFractionDigits}-{maxfractionDigits}
  • minIntegerDigits:整数部分保留最小的位数,默认值为1.
  • minFractionDigits:小数部分保留最小的位数,默认值为0.
  • maxFractionDigits:小数部分保留最大的位数,默认值为3.

用法如下:

@Component({
    selector: 'pipe-demo-number',
    template: `
        <div>
            <p>A 变量:{{a | number: '3.4-5'}}</p>
            <p>B 变量:{{b | number: '3.1-5'}}</p>
        </div>
    `
})
export class PipeDemoNumberComponent {
    a: number = 2.718281828459045;
    b: number = 33456;
}

转换后结果:

a 变量:002.71828
b 变量:33,456.0

格式化变量a所采用的参数为3.4-5,参数.左边的3表示整数位最少保留三位,原值整数位为1位不足3位,所以用0补齐。参数.右边的4-5表示保留小数的最小数位为4为,最大数位为5位,因原始数据小数位大于5位,所以保留四舍五入后的5位小数。

格式化变量b所采用的参数为3.1-5,参数.左边的3表示整数位最少保留三维,原值正式位为5位,大于3位,所以全部保留。参数.右边的1-5表示保留小数的最小数位为1位,最大数位为5位,因原始数据没有小数位,因此采用最小1位限制的规则,小数位补0。

CurrencyPipe

关键词:货币
CurrentPipe管道可以将数值进行货币格式化处理。语法如下:

expression | currency[: currencyCode[: symbolDisplay[: digitInfo]]]

- 参数currentcyCode:表示要格式化的目标货币格式,值为ISO 4217货币码,如CNY人民币、USD美元、EUR欧元等。
- 参数symbolDisplay:表示以该类型货币的哪种格式显示,值为布尔值,true表示显示货币符号如¥、$等,false表示显示ISO 4217货币码如CNY、USD等。
- digitInfo:参考DecimalPipe管道。

来个例子:

@Component({
    selector: 'pipe-demo-currency',
    template: `
        <p>A 变量:{{ a | currency: 'USD': false }}</p>
        <p>B 变量:{{ b | currency: 'CNY': true: '3.1-3'}}</p>
    `
})
export class PipeDemoCurrencyComponent {
    a: number = 0.259;
    b: number = 20.6745;
}

转换后结果

A 变量:USD0.259
B 变量:¥020.675

PercentPipe

关键词:百分数
PercentPipe管道可以对数值进行百分比处理。语法如下:

expression | percent[: digitInfo]
  • 参数digitInfo:参考DecimalPipe管道

直接看例子:

@Component({
    selector: 'pipe-demo-Percent',
    template: `
        <div>
            <p>A 变量:{{ a | percent }}</p>
            <p>B 变量:{{ b | percent: '3.1-3' }}</p>
        </div>
    `
})
export class PipeDemoPercentComponent {
    a: number = 0.259;
    b: number = 0.657;
}

输出:

A 变量:25.9%
B 变量:065.7%

注意

这里的百分化处理是在原值的基础上进行乘以100%,而不是简单的字符串拼接。

SlicePipe

关键词:截断
SlicePipe管道用于裁剪数组字符串,返回裁剪后的目标子集。语法如下:

expression | slice: start[: end]

SlicePipe是基于Array.prototype.slice()方法和String.prototype.slice()方法来实现的。

自定义管道

老规矩,Angular给了一些内置管道,那么肯定还可以自定义管道来解决特定的问题。下面就来学习如何自定义管道。

需求:将male展示为男,female展示为女

1.创建自定义管道

import { Pipe, PipeTransform } form '@angular/core';  //引入PipeTransform是为了继承transform方法

@Pipe({ name: 'sexReform' })  //name属性值惯用小驼峰是写法
export class SexReformPipe implements PipeTransform {
    transform(value: string): string {
        switch(value){
            case 'male': return '男';
            case 'female': return '女';
            default: return '不男不女或雌雄同体';
        } 
    }
}

2.使用自定义管道

//...
<p> {{ sexValue | sexReform }}</p>
<p class="{{ sexValue | sexReform }}"</P>   //将返回值赋值给class
//...

3.注意:管道返回值不能返回html文档,会被转移展示!!不要用这种方法来创建节点。

管道的变化监测

在之前的数据绑定中,学习到Angular的变化监测机制,如果频繁的触发变化监测会引起性能问题。
但我们可以通过使用管道,让Angular选择使用更简单、更快速的变化监测策略来提高性能。
下面使用管道实现一个过滤联系人列表功能的例子来了解Angular管道的性能优化:

//...
@Pipe({ name: selectContanct })
export class SelectContanctPipe implements PipeTransform{
    transform(allContacts: Array, prefix: string){
        return allContacts.filter(contact => contact.name.match("^"+prefix));
    }
}
@Component({
    selector: 'pipe-demo',
    template: `
        <input type="text" #box (keyup.enter)="addContact(box.value); box.value=''" placeholder="输入联系人后回车添加" />
        <div *ngFor="let contact of (contacts | selectContactPipe: '李')">
           {{contact.name}}
        </div>
    `
})
export class PipeDemoComponent {
    contacts = [{name: '张三'}, {name: '李四'}];
    addContact(name: string) {
        this.contacts.push({name});
    }
}

上面的管道过滤只显示”李”姓的联系人,如果用户输入一个”李”姓联系人,然后回车将该联系人添加至contacts数组中。然后我们会觉得联系人列表应该会实时显示新的联系人,然而并没有
这是因为Angular优化了管道的监测机制,它会忽略对象内值的变化,只会监测指向对象的指针是否发生改变。

这种管道称为纯管道,虽然纯管道优化了性能,但有时无法满足需求,就像上面的例子那样。
这时我们就需要另外一种变化监测机制,也就是非纯管道

Angular管道有两种变化监测机制,一种是纯管道(默认),另一种即非纯管道。

纯管道 (Pure Pipe)

  1. 使用纯管道时,只有监测到输入值发生纯变更才会调用纯管道的transform方法来转换数据。
  2. 纯变更是指对基本数据类型输入值的变更,或对对象的引用放生改变。

非纯管道 (Impure Pipe)

使用非纯管道,Angular组件在每个变化监测周期都会调用非纯管道。
1.设置非纯管道

@Pipe({ 
    name: 'selectContact',
    pure: false    //设置非纯管道
})

扩展阅读

安全导航操作符

Angular的模版表达式在某些特定场景中允许使用一些特殊的连接操作符,如本章介绍的管道操作符。
下面来学习安全导航操作符”?.”。
假设模版表达式detail.telNum的值为0123456789,下面的代码正常运行后界面将会显示为0123456789,代码如下:

<p>{{ detail.telNum }}</p>

如果模版变量detail没被赋值,在Angular会报错,程序无法运行。
我们可以使用以下处理方式规避这种错误:

<p>{{ detail && detail.telNum }}</p>  //疑问,这里的结果会是什么?

上述方法可以达到预期,但是遇到长属性路径时会显得臃肿。这时我们可以使用”?.”安全导航操作符来处理,避免因为属性路径中出现null或者undefined值而出现的错误。

<p>{{ detail?.telNum }}</p>

双向绑定的原理

在模版部分的学习中,我们已经了解到,[(ngModel)]可以拆分为ngModel和ngModelChange两部分。其中,ngModel指令的输入属性用来设置元素的值,ngModelChange作为NgModel指令的输出属性用来监听元素值是否变化。
需要注意的是,ngModelChange属性并不会生成DOM事件,实际上它是一个EventEmitter类型的对象,[(ngModel)]的具体实现如下:

@Direvtive({
    selector: '[ngModel]',
    host: {
            "[value]": "ngModel",
            "(input)": "ngModelChange.next($event.target.value)"
    }
})
class NgModelDirective {
    @Input() ngModel: any;
    @Output() ngModelChange: EventEmitter = new EventEmitter();
}

host属性用来描述和指令元素相关的输入输出属性变化,即当[ngModel]的ngModelChange事件发生时就会触发input事件,当[ngModel]的ngModel值变化时就会更新value属性。

Angular提供了一种双向数据绑定的语法,即[(x)]。也就是说当Angular解析一个[(x)]的绑定目标时,相当于为这个x指令绑定一个名为x的输入属性和一个名为xChange的输出属性,示例代码如下:

<span [(x)]="e"></span>
//等同于下面的代码
<span [x]="e" (xChange)="e=$event"></span>

总的来说,双向数据绑定实际上就是通过输入属性存储数,同时通过一个与之对应的输出属性(输入属性+Change后缀)监听输入属性的数据变化来触发相应的事件。

了解Angular双向数据绑定的原理后,接下来通过创建一个支持双向绑定的组件例子来加深理解。该例子绑定一个Number的输入输出属性,同时在组件需要定义一个@Output输出属性来匹配@Input输入属性,示例代码如下:

//amount.component.ts
import { Component, Input, Output, EventEmitter } from '@angular/core';

@Component({
    selector: 'amount',
    template: `
        <span>
            子组件当前值: {{value}} -
            <button (click)="increment()"> 增加 </button>
        </span>
    `
})
export class AmountComponent {
    @Input() value: number = 0;
    @Output() valueChange: EventEmitter<number> = new EventEmitter<number>();

    increment(){
        this.value++;
        this.valueChange.emit(this.value);
    }
}
//app.component.ts
import { Component, Input } from '@angular/core';
import { AmountComponent } from './amount.component';

@Component({
    selector: 'app',
    template: `
        <div>
            <div>
                <span>Number 1:</span>
                <amount [(value)]="number1"></amount>

            </div>
            <div>
                <span>Number 2:</span>
                <amount [(value)]="number2" (valueChange)="number2=$event"></amount>
            </div>
            <ul>
                <li>Number 1:父组件当前值:{{number1}}</li>
                <li>Number 2:父组件当前值:{{number2}}</li>
            </ul>
        </div>
    `
})
export class Parent {
    number1: number = 0;
    number2: number = 2;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

5.揭秘angular2学习 ------- 管道 的相关文章

  • 如何在使用可观察对象作为数据源的同时使角度数据表更新行、结果数和分页

    我正在尝试在我的 Angular 7 应用程序中使用 Angular Datatables 作为显示搜索结果的组件 请求创建组件创建一个搜索表单 当单击提交按钮时 使用请求服务将 http Post 请求发送到后端 然后请求创建组件更新请求
  • 显示在 Angular 5 中作为 Blob 对象接收的图像

    我正在开发一个 MEAN Stack 应用程序 我想做的是显示存储在数据库中的图像 这样后端就可以工作 但我真正的问题是在前端Angular所以我这样做了 首先从后端接收图像 我做了一个服务来做到这一点 Function to get us
  • 避免在 Angular 2+ 中嵌套订阅?

    我有2个端点 1 个端点来获取当前用户的日志 1 个端点来获取该用户的授权 实际上我使用 this user subscribe e gt this grants get e subscribe x gt console log x 但这是
  • 如何使用 *ngFor 迭代对象键

    我想在 Angular 2 中使用 ngFor 迭代 object object 问题是该对象不是对象的数组 而是包含更多对象的对象的对象 data id 834 first name GS last name Shahid phone 0
  • 如何使用 Angular 2 动画实现翻转效果?

    我一直在我的项目中使用纯CSS翻转卡片 但这个解决方案不是合适的 有人可以通过点击按钮来呈现角度 2 的翻转吗 我在 angularjs 中找到了一个https codepen io Zbeyer pen oXQrZg https code
  • Windows 10 中的 npm 安装错误( npm install -g angular-cli )

    node v v4 5 0 npm v 5 0 1 有人在 Windows 10 中安装 angular cli 时遇到过这种问题吗 请尝试以下操作 step 0 运行这个命令 npm uninstall g angular cli npm
  • Angular Material 7 多重选择 - 设置选定值

    我正在尝试设置多选下拉列表的选定值 如下所示 循环根据条件选择多个复选框并进行设置 document getElementsByTagName mat pseudo checkbox index classList add mat pseu
  • 如何转义角度 HttpParams?

    在 Angular 服务中 我使用 HttpParams 将字符串发送到服务 get phone string Observable
  • 将 Angular Web 组件 EventEmitter 监听到 javascript

    我在以下工具的帮助下创建了一个小型网络组件本文 https medium com IMM9O web components with angular d0205c9db08f使用角度元素 其中包括 Input and Output 我能够将
  • Angular2 与 ASP.NET 5 [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我正在将 Angular2 与 ASP NET5 gulp 和 typescript 结合使用 当我解决
  • 角度垫排序不适用于带点表示法的 matColumnDef

    我正在尝试按列对表进行排序 当我必须过滤另一个结果中的结果时 就会出现问题 我尝试通过括号表示法和点表示法访问该属性 但没有给出结果 还将最终节点放置在 matColumnDef 中 但失败 因为有 2 列同名 table table
  • Angular firestore 查询 firestore 文档

    我有以下查询 selectedUser AngularFirestoreDocument
  • Angular 2 Material 2 日期选择器日期格式

    我不知道如何更改材料2日期选择器的日期格式 我已阅读文档 但我不明白我实际上需要做什么 datepicker默认提供的输出日期格式为f e 6 9 2017 我想要实现的目标是将格式更改为类似的格式9 Jun 2017或任何其他 文档htt
  • Angular 2 获取当前路线

    所以我需要以某种方式检查我是否在主页上执行某些操作 而在其他页面上则不执行此操作 该组件也在所有页面上导入 如果我在主页上 如何检测该组件 Thanks 尝试这个 import Router from angular router expo
  • Angular2 - 在反应表单上设置日期字段

    我有一个使用两个日期字段的组件 开始日期和结束日期 默认情况下 我禁用了结束日期字段 当他们选择开始日期时我会切换它 this transitionForm this fb group effectiveEndDate value disa
  • Angular 2可以通过路由参数传递对象吗?

    我可以使用一些建议来解决我面临的这个问题 为了尽可能地向您解释这一点 我创建了一个主要组件 Component selector main component providers FORM PROVIDERS MainService Mai
  • 如何使用深度等于 (Angular 7)

    通过 VS Code 自动导入 import deepEqual require deep equal 不起作用 错误 TS1202 定位时无法使用导入分配 ECMAScript 模块 考虑使用 import as ns from mod
  • 在业力测试中按类名获取两个div(Angular 4.0)

    我有这样的看法 div div class header title Example title 1 div div div div class header title Example title 2 div div 在我的业力测试中 我
  • Angular 4 过滤器搜索自定义管道

    所以我试图构建一个自定义管道来在 ngFor 循环中执行多个值的搜索过滤器 我花了几个小时寻找一个好的工作示例 其中大多数都是基于以前的版本 并且似乎不起作用 所以我正在构建管道并使用控制台为我提供值 但是 我似乎无法显示输入文本 以下是我
  • 模块解析失败:意外的标记 (4:0)

    我正在尝试将 FULLCALENDAR 添加到我的 Angular v14 项目中 但在所有设置之后我突然面临这个错误 知道如何处理这个错误吗 包 json fullcalendar angular 5 11 0 fullcalendar

随机推荐

  • 【通信原理】数字基带传输的线路码型

    数字基带传输的线路码型 简单介绍数字基带传输的线路码型的信号波形的特点 以及生成方法 注意观察频谱 文末附Matlab代码 以下包括双极性NRZ 单极型NRZ 双极型RZ 单极型RZ 差分码 曼切斯特码 数字双相码 密勒码 CMI码 AMI
  • STM32+二氧化碳传感器(FS00301)

    配置串口4 uart c u8 USART4 RX BUF USART REC LEN 接收缓冲 最大USART REC LEN个字节 u16 USART4 RX STA 0 接收状态标记 void uart4 init u32 bound
  • Istio Java SDK API - 资源访问-VirtualService/Gateway/DestinationRule/ServiceEntry

    环境 参考上一篇文章 Java如何连接Istio 参考上一篇文章 访问Isito资源 VirtualService Gateway DestinationRule ServiceEntry 项目源码 package com you micr
  • QML控件类型:Tumbler

    一 描述 Tumbler 用于通过旋转轮子来选择一个值 Tumbler model 10 API 类似于 ListView 和 PathView 等视图的 API 可以设置模型和委托 并且 count 和 currentItem 属性提供对
  • html登录页面设计

    html登录页面设计实训 html和CSS概述 1 html HTML 是一种标记语言 用于定义网页的结构和内容 包括段落 标题 列表 链接等等 它使用标签来标识不同的内容 并且这些标签可以用于嵌套 2 CSS CSS 是一种样式表语言 用
  • R语言中 attach()与detach(),及with()的使用

    attach what pos 2L name deparse substitute what backtick FALSE warn conflicts TRUE 1 attach 是对what添加路径索引 避免重复输入what名称 参数
  • 数据分析利器Python——列表、元组和字典

    文章目录 目录 文章目录 前言 一 列表和元组 1 创建列表和元组 2 列表和元组的通用用法 2 1 通过索引使用元素 2 2 子序列 2 3 加法 2 4 乘法 2 5 in运算符 2 6 长度 最大值和最小值 2 7 序列封包和序列解包
  • hdu1253 胜利大逃亡(三维bfs索搜)

    http acm hdu edu cn showproblem php pid 1253 第一次做做三维的 思路跟二维的没有区别 这道题目第一次出现Memory Limit Exceeded 这种问题 找了很长时间才发现应该是先判断在存入
  • Java8中处理日期和时间的常用API

    场景 java8中引入了一个新包java time 包含了多数会用到的核心类 注 博客 https blog csdn net badao liumang qizhi 关注公众号 霸道的程序猿 获取编程相关电子书 教程推送与免费下载 实现
  • Modbus ASCII LRC生成

    Modbus ASCII的报文生成顺序为 1 生成PDU 2 生成LRC校验码 将LRC附加到PDU后面 3 将2中的数组转换成HEX格式的文本 4 在HEX格式文本的0位置插入冒号 在HEX格式文本的后面附加Windows换行符 生成LR
  • 什么是Kubernetes?

    刚刚进学校实验室 第一次开会导师和小组同学说了n次Kubernetes 从来没听过 一脸懵逼 Kubernetes也有很多人把它叫K8S 原文链接 http omerio com 2015 12 18 learn the kubernete
  • 双指针详解

    1 定义 顾名思义 双指针即用两个不同速度或不同方向的指针对数组或对象进行访问 通过两个不同指针的碰撞从而达到特定的目的 2 解决问题 在时间或空间条件有限的情况下使用单向遍历需要消耗大量的时间或者根本无法解决问题 这时候就需要我们使用双指
  • 使用IDEA打开eclipse项目

    文章目录 点击左上角的File New Project from Existing Sources 选择到要打开的项目路劲 选择好后点击OK 先勾选 Import project from external model 后选择Eclipse
  • python如何调用参数配置文件_如何使用Python3实现json作为配置文件?

    当脚本重复使用时候 我们需要不断的去更新一些参数 这样使得时间浪费很多 效率也不高 这该怎么办呢 小编在遇到同样问题时 发现了一个可以解决的方式 那就是利用json 大家有需求的可以来看下哦 相信大部分人遇到这个问题 最先尝试的是 py文件
  • Alist简单使用指南

    一 Alist 简介 一款支持多种存储的目录文件列表程序 支持 web 浏览与 webdav 后端基于gin 前端使用react 下面使用 docker和caddy 主要用来支持https 来部署 效果 二 docker部署 配置docke
  • Nginx转发超简单实现

    使用场景 用Nginx做转发 实现更好的服务器管理 此处实现多域名转发 假设服务器分配 客户访问机器IP 192 168 137 70 Nginx接收访问请求 并转发到49服务器 真实服务机器IP 192 168 137 49 IIS或者A
  • push c语言什么作用,“c语言”中,“pop函数”和“push函数”的作用分别是什么?...

    这个算是数据结构的内容讲解的是一个叫做栈类型的数据结构 这个数据结构的特点就是后进先出 最后放进去的数据最先拿出来 pop函数就是拿出数据的操作 push是放入是数据的操作 内容拓展 pop函数呵push函数的使用 include incl
  • 利用fgets实现行数读取

    首先在shell下man fgets include
  • opencv实现图片裁剪和缩放

    1 格式转换 yuv2rgb include
  • 5.揭秘angular2学习 ------- 管道

    管道简介 管道是什么 Angular的管道可以看作成是一个数据格式化展示的工具 管道可以将数据格式化显示 而不改变源数据 比如关于日期的展示 对于源数据使用管道1可以以yyyy MM dd来展示 也可以使用管道2展示成Feb 28 2017