编写一个完整的Angular4 FormText 组件

前端之家收集整理的这篇文章主要介绍了编写一个完整的Angular4 FormText 组件前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

组件定义

  1. import { Component,Output,Input,forwardRef,EventEmitter} from '@angular/core';
  2. import {ControlValueAccessor,NG_VALUE_ACCESSOR} from '@angular/forms';
  3.  
  4. @Component({
  5. selector: 'form-text',template: `
  6. <div >
  7. <label>{{label}}:</label>
  8. <input type="text" [(ngModel)]="value"
  9. placeholder="{{placeholder}}" >
  10. </div>
  11. `,providers: [
  12. {
  13. provide:NG_VALUE_ACCESSOR,useExisting:forwardRef(()=>FormTextComponent),multi:true
  14. }
  15. ]
  16. })
  17. export class FormTextComponent implements ControlValueAccessor {
  18. @Input() label:string = '';
  19. @Input() placeholder: string='';
  20.  
  21. @Output() onChange: EventEmitter<any> = new EventEmitter<any>();
  22. public innerValue: any;
  23. public changeFn: Function = () => {};
  24.  
  25. get value(): any {
  26. return this.innerValue;
  27. };
  28.  
  29. set value(v: any) {
  30. if (v !== this.innerValue) {
  31. this.innerValue = v;
  32. this.changeFn(v);
  33. }
  34. }
  35.  
  36.  
  37. writeValue(value: any) {
  38. if (value !== this.innerValue) {
  39. this.innerValue = value;
  40. }
  41. }
  42.  
  43. registerOnChange(fn: any) {
  44. this.changeFn = fn;
  45. }
  46.  
  47. registerOnTouched(fn: any) {
  48. //
  49. }
  50.  
  51. }

组件使用

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

需要注意的点:

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

猜你在找的Angularjs相关文章