如何编写一个完整的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 相关文章推荐
解决FLASH需要点击激活的代码
Dec 20 Javascript
jquery tools之tooltip
Jul 25 Javascript
jquery库文件略庞大用纯js替换jquery的方法
Aug 12 Javascript
各式各样的导航条效果css3结合jquery代码实现
Sep 17 Javascript
jquery实现超简单的瀑布流布局【推荐】
Mar 08 Javascript
JavaScript切换搜索引擎的导航网页搜索框实例代码
Jun 11 Javascript
深究AngularJS如何获取input的焦点(自定义指令)
Jun 12 Javascript
js图片上传的封装代码
Aug 01 Javascript
对于input 框限定输入值为浮点型的js代码
Sep 25 Javascript
JQuery通过后台获取数据遍历到前台的方法
Aug 13 jQuery
JavaScript实现拖拽和缩放效果
Aug 24 Javascript
JavaScript 中for/of,for/in 的详细介绍
Nov 17 Javascript
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
php 用checkbox一次性删除多条记录的方法
2010/02/23 PHP
浅析php中json_encode()和json_decode()
2014/05/25 PHP
destoon供应信息title调用出公司名称的方法
2014/08/22 PHP
PHP中文编码小技巧
2014/12/25 PHP
[原创]ThinkPHP中SHOW_RUN_TIME不能正常显示运行时间的解决方法
2015/10/10 PHP
PHP实现基于mysqli的Model基类完整实例
2016/04/08 PHP
jQuery EasyUI API 中文文档 - TimeSpinner时间微调器
2011/10/23 Javascript
常用Extjs工具:Extjs.util.Format使用方法
2012/03/22 Javascript
几种设置表单元素中文本输入框不可编辑的方法总结
2013/11/25 Javascript
js网页实时倒计时精确到秒级
2014/02/10 Javascript
js实现的GridView即表头固定表体有滚动条且可滚动
2014/02/19 Javascript
js解析json读取List中的实体对象示例
2014/03/11 Javascript
jQuery获取节点和子节点文本的方法
2014/07/22 Javascript
js用拖动滑块来控制图片大小的方法
2015/02/27 Javascript
在Javascript中处理字符串之big()方法的使用
2015/06/08 Javascript
jquery ajaxfileupload异步上传插件
2017/11/21 jQuery
js构造函数创建对象是否加new问题
2018/01/22 Javascript
vue2.0+ 从插件开发到npm发布的示例代码
2018/04/28 Javascript
浅谈vue中组件绑定事件时是否加.native
2019/11/09 Javascript
[01:07:46]完美世界DOTA2联赛循环赛 Magma vs IO BO2第二场 11.01
2020/11/02 DOTA
python实现网站的模拟登录
2016/01/04 Python
python的变量与赋值详细分析
2017/11/08 Python
Python3连接SQLServer、Oracle、MySql的方法
2018/06/28 Python
Python判断以什么结尾以什么开头的实例
2018/10/27 Python
pandas中apply和transform方法的性能比较及区别介绍
2018/10/30 Python
详解分布式任务队列Celery使用说明
2018/11/29 Python
python内存动态分配过程详解
2019/07/15 Python
Python中过滤字符串列表的方法
2020/12/22 Python
recorder.js 基于Html5录音功能的实现
2020/05/26 HTML / CSS
商场开业庆典策划方案
2014/06/02 职场文书
民主生活会对照检查材料
2014/09/22 职场文书
2015年毕业生实习评语
2015/03/25 职场文书
2015年班级工作总结范文
2015/04/03 职场文书
老人院义工活动感想
2015/08/07 职场文书
2019年工作总结范文
2019/05/21 职场文书
导游词之山西-五老峰
2019/10/07 职场文书