热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

自定义指令控制两位小数显示,接口Interface和TS解构

2019独角兽企业重金招聘Python工程师标准自定义指令需求:在表单提交时textnumber的输入框必须以两位小数点显示,即输入1010

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

自定义指令

需求:在表单提交时text="number"的输入框必须以两位小数点显示,即输入10 => 10.00, 10.1234 => 10.12。

难点:双向数据绑定[(ngModal)]="value",不支持对值的操作,即不能使用管道去控制。

then,下面的自定义指令customDecimal是通过获取元素本身的value进行操作,再赋值回给元素本身实现

import { Directive, Input, ElementRef, Renderer2, AfterViewInit } from '@angular/core';
import { CommonModule, DecimalPipe } from "@angular/common";@Directive({selector: '[customDecimal]'
})
export class DecimalDirective implements AfterViewInit {// 括号里是dom输入的名字,括号后面是别名,方便操作而已@Input('customDecimal')customDecimal: any;// el,获取该元素集合,rd2,dom的方法属性集合(Renderer没有监听事件),decimalPipe,小数管道constructor(public el: ElementRef, public rd2: Renderer2, public decimalPipe: DecimalPipe) {}ngAfterViewInit() {// listen为angular封装的一些操作dom的集合,详情看对应的接口this.rd2.listen(this.el.nativeElement, 'blur', (e) => {let v = e.srcElement.value;if (v && +v) {// 这里的this指的是DecimalDirective指令,要获得指令控制的元素必须让dom传一个模板变量进来let value = this.customDecimal.value;value = this.decimalPipe.transform(v, '1.2-2');// 由于number类型的输入框,在输入3位整数以上会出现逗号// 管道转换3位整数以上会出现逗号分隔this.customDecimal.value = Array.from(value).map((val, i) => {return (val === ',') ? '' : val;}).join('');} else {return;}})}
}

HTML

必须传入模板变量#ipt

---------------

接口Interface

接口是强控制对象属性,像结构语法,VO只是一个对象用来方便对接

这是typeScript的结构方法:   ({title: string, name: string}) => {}

实际传进来的参数对象不止title 和 name两个属性, 但ts只会描述这两个属性,其他忽略,这就是接口的作用,固化对象属性值

TS中的解构和接口是两码事

这里就不解释解构是什么,TS官网更详尽。

刚开始接触解构和接口的时候,老是想尝试用解构或者接口搞一番优秀代码,但自己理解错误,老认为解构就是接口的写法,也是可以达到过滤数据的。像例子1

let data = {name: 'name', age: 10};
// 我一直以为这样就可以定义接口,对data作简单过滤
let obj: {name} = data;

解构基本用法

let {name, age} = {name: 'hu', age: 10};/*结果
name => 'hu'
age => 10
*/

接口基本用法

interface person {name: string,age: number
}let fn = function(obj: person): void{console.log(obj);
}fn({name: 'hu', age: 10, sex: 'male'}); // {name: 'hu', age: 10} 过滤了sex

误区:不要以为{xxx,  xxx}就是接口,像例子1,是JS的赋值操作,并没有什么过滤控制,最常见的接口过滤就是在方法中传参数,才能过滤。赋值操作并不能达到过滤效果。

 

谈一下implements 和extend

Renderer2抽象类提供的属性和方法


转:https://my.oschina.net/u/2949632/blog/1501655



推荐阅读
author-avatar
JQLNo1xinfinite
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有