如何编写一个完整的Angular4 FormText 组件


Posted in Javascript onNovember 18, 2017

本文主要介绍了如何编写一个完整的Angular4 FormText 组件,分享给大家,也给自己留个笔记

组件定义

import { Component, Output, Input, forwardRef, EventEmitter} from '@angular/core';
import {ControlValueAccessor, NG_VALUE_ACCESSOR} from '@angular/forms';

@Component({
 selector: 'form-text',
 template: `
  <div >
    <label>{{label}}:</label>
    <input type="text" [(ngModel)]="value"
    placeholder="{{placeholder}}" >
  </div>
 `,
 providers: [
  {
   provide:NG_VALUE_ACCESSOR,
   useExisting:forwardRef(()=>FormTextComponent),
   multi:true
  }
 ]
})
export class FormTextComponent implements ControlValueAccessor {
 
 @Input() label:string = '';
 @Input() placeholder: string='';

 @Output() onChange: EventEmitter<any> = new EventEmitter<any>();
 
 public innerValue: any;
 public changeFn: Function = () => {};
 

 get value(): any {
  return this.innerValue;
 };

 set value(v: any) {
  if (v !== this.innerValue) {
   this.innerValue = v;
   this.changeFn(v);
  }
 }


 writeValue(value: any) {
  if (value !== this.innerValue) {
   this.innerValue = value;
  }
 }

 registerOnChange(fn: any) {
  this.changeFn = fn;
 }

 registerOnTouched(fn: any) {
  //
 }

}

组件使用

<form-text [(ngModel)]="mobile" [placeholder]="placeholder" [label]="label"></form-text>
<p>{{mobile}}</p>

需要注意的点:

1.需要配置组件的providers
2.需要实现ControlValueAccessor接口

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
JS+css 图片自动缩放自适应大小
Aug 08 Javascript
在javascript中如何得到中英文混合字符串的长度
Jan 17 Javascript
JS实现上下左右对称的九九乘法表
Feb 22 Javascript
JS中frameset框架弹出层实例代码
Apr 01 Javascript
详解JavaScript中的自定义事件编写
May 10 Javascript
jQuery.form.js的使用详解
Jun 14 jQuery
javascript  删除select中的所有option的实例
Sep 17 Javascript
vue-router路由懒加载的实现(解决vue项目首次加载慢)
Aug 28 Javascript
vue项目从node8.x升级到12.x后的问题解决
Oct 25 Javascript
详解vue-router的Import异步加载模块问题的解决方案
May 13 Javascript
Vuex的各个模块封装的实现
Jun 05 Javascript
JS JQuery获取data-*属性值方法解析
Sep 01 jQuery
Angular中支持SCSS的方法
Nov 18 #Javascript
VUE element-ui 写个复用Table组件的示例代码
Nov 18 #Javascript
jQuery实现checkbox的简单操作
Nov 18 #jQuery
浅谈Emergence.js 检测元素可见性的 js 插件
Nov 18 #Javascript
基于jquery实现五星好评
Nov 18 #jQuery
基于JavaScript实现五子棋游戏
Aug 26 #Javascript
JavaScript canvas实现围绕旋转动画
Nov 18 #Javascript
You might like
《神奇女侠:血脉》神力女超人大战犯罪公司
2020/04/09 欧美动漫
Linux下将excel数据导入到mssql数据库中的方法
2010/02/08 PHP
为PHP初学者的8点有效建议
2010/11/20 PHP
php输出表格的实现代码(修正版)
2010/12/29 PHP
PHP+jQuery实现自动补全功能源码
2013/05/15 PHP
ThinkPHP模板自定义标签使用方法
2014/06/26 PHP
PHP Oauth授权和本地加密实现方法
2016/08/12 PHP
Underscore.js 的模板功能介绍与应用
2012/12/24 Javascript
文件编码导致jquery失效的解决方法
2013/06/26 Javascript
js和css写一个可以自动隐藏的悬浮框
2014/03/05 Javascript
angularJS中$apply()方法详解
2015/01/07 Javascript
深入理解JavaScript系列(33):设计模式之策略模式详解
2015/03/03 Javascript
浅谈下拉菜单中的Option对象
2015/05/10 Javascript
jquery实现可自动收缩的TAB网页选项卡代码
2015/09/06 Javascript
详解javascript数组去重问题
2015/11/06 Javascript
jQuery插件HighCharts绘制的基本折线图效果示例【附demo源码下载】
2017/03/07 Javascript
JavaScript之json_动力节点Java学院整理
2017/06/29 Javascript
select2 ajax 设置默认值,初始值的方法
2018/08/09 Javascript
vue强制刷新组件的方法示例
2019/02/28 Javascript
JavaScript静态作用域和动态作用域实例详解
2019/06/17 Javascript
微信小程序class封装http代码实例
2019/08/24 Javascript
js页面加载后执行的几种方式小结
2020/01/30 Javascript
JavaScript变量Dom对象的所有属性
2020/04/30 Javascript
Python实现根据指定端口探测服务器/模块部署的方法
2014/08/25 Python
Python中用altzone()方法处理时区的教程
2015/05/22 Python
对Python中创建进程的两种方式以及进程池详解
2019/01/14 Python
python网络编程之多线程同时接受和发送
2019/09/03 Python
Python批量启动多线程代码实例
2020/02/18 Python
Python 无限级分类树状结构生成算法的实现
2021/01/21 Python
10个顶级Python实用库推荐
2021/03/04 Python
国际书籍零售商:Wordery
2017/11/01 全球购物
广州御银科技股份有限公司试卷(C++)
2016/11/04 面试题
公司前台接待岗位职责
2013/12/03 职场文书
检查机关领导群众路线教育实践活动个人整改措施
2014/10/28 职场文书
SpringBoot集成Redis的思路详解
2021/10/16 Redis
mysql的单列多值存储实例详解
2022/04/05 MySQL