NG_VALUE_ACCESSOR

用于为表单控件提供 ControlValueAccessor

interface ControlValueAccessor {writeValue(obj: any): voidregisterOnChange(fn: any): voidregisterOnTouched(fn: any): voidsetDisabledState(isDisabled: boolean)?: void
}

双向绑定 示例组件:

import {ChangeDetectionStrategy,ChangeDetectorRef,Component,forwardRef,
} from '@angular/core';
import { NG_VALUE_ACCESSOR, ControlValueAccessor } from '@angular/forms';@Component({selector: 'my-input',styleUrls: ['./my.input.component.scss'],changeDetection: ChangeDetectionStrategy.OnPush,providers: [{provide: NG_VALUE_ACCESSOR,useExisting: forwardRef(() => MyInputComponent),multi: true,},],template: `<input type="text" #inputElement [(ngModel)]="value"  (ngModelChange)="modelChange($event)"/><button (click)="clickMe()">change</button>`
})
export class MyInputComponent implements ControlValueAccessor {private onTouch = () => {};private onChange = (newValue: any) => {};value = '';index = 0; // for test manual change valueconstructor(private cdr: ChangeDetectorRef) { }clickMe() {const v = 'index : ' + (++this.index);this.value = v;this.onChange(v);}modelChange(newValue: string) {this.onChange(newValue);}// ControlValueAccessor - // 至少需要实现 writeValue, registerOnChange,registerOnTouchedwriteValue(v: any) {if (v !== this.value) {this.value = v;}// on pushthis.cdr.markForCheck();}registerOnChange(fn: any) {this.onChange = fn;}registerOnTouched(fn: any) {this.onTouch = fn;}
}

registerOnTouched 的参数 fn:

registerOnChange 的参数 fn :

angular : 自定义组件双向绑定 [(ngModel)]相关推荐

  1. vue 自定义组件双向数据绑定

    文章目录 序 属性&事件传值双向绑定 v-model组件双向绑定 .sync修饰符双向绑定 总结 !!!这边文章记录的是 vue2 的概念,vue3 对双向绑定进行了改动,不要把一下代码放到 ...

  2. 【angular学习】自定义实现双向绑定

    实现username属性的双向绑定 根据慕课网教程代码 horizontal-grid.component.html <!-- Angular 中的双向绑定其实就是属性绑定+事件绑定--> ...

  3. Vue父组件访问子组件属性和方法、父子组件双向绑定(两种方法)

    Vue父组件访问子组件属性和方法.父子组件双向绑定(两种方法) 1. 使用vue-cli创建项目 目录结构如下图: 2. 编写代码 src/components/HelloWorld.vue < ...

  4. angular的数据双向绑定

    以前我们通过jquery操作DOM可以实现数据绑定,但这样会使操作量加大,而在angular中可以轻松的实现数据双向绑定.数据双向绑定指的是数据改变,相应的视图发生改变,而用户操作视图,底层数据会发生 ...

  5. [vue] vue父子组件双向绑定的方法有哪些?

    [vue] vue父子组件双向绑定的方法有哪些? 1.利用对象的引用关系来实现 2.父子组件之间的数据传递 3.使用.sync修饰符 个人简介 我是歌谣,欢迎和大家一起交流前后端知识.放弃很容易, 但 ...

  6. angular 自定义组件_如何创建Angular 6自定义元素和Web组件

    angular 自定义组件 by Prateek Mishra 通过Prateek Mishra 如何创建Angular 6自定义元素和Web组件 (How to create Angular 6 C ...

  7. Angular自定义组件实现ngModel双向绑定

    1.自定义组件ts @Component({selector: 'app-custom-tree',templateUrl: './custom-tree.component.html',styles ...

  8. 【进阶玩法】Angular用emit()实现类似Vue.js的v-model双向绑定[(ngModel)]功能

    app.component.html <app-sizer [(ngModel)]="fontSizePx"></app-sizer> <p [sty ...

  9. angular 自定义组件的双向数据绑定

    组件 import { Component, EventEmitter, Input, Output } from '@angular/core';@Component({selector: 'app ...

最新文章

  1. 开源 免费 java CMS - FreeCMS1.5 标签 guestbookPage
  2. 聊聊flink JobManager的heap大小设置
  3. 07 | 案例篇:系统中出现大量不可中断进程和僵尸进程怎么办?(上)
  4. 开发之痛:稳定的测试环境,怎么就那么难
  5. 数据结构-栈1-顺序存储
  6. JMETER性能测试从入门到精通高级篇 - 分布式压测部署之负载机的设置(详解教程)
  7. 二叉树 中序遍历 python_leetcode No.105 从前序与中序遍历序列构造二叉树
  8. ActiveMQ 无法启动 提示端口被占用 解决方案
  9. 局域网sip服务器搭建:opensips
  10. 如何录制游戏视频?游戏录制软件推荐
  11. 计算机的符号名称大全集,特殊符号大全
  12. 12306GT多线程、分流免费抢票工具使用心德
  13. 词向量经典模型:从word2vec、glove、ELMo到BERT
  14. java执行sql列名无效_列名无效!java代码里的SQL语句!数据库里可以得到正确为什么放java里出错了?...
  15. 梦幻西游手游版找不到服务器,梦幻西游手游无法选择服务器怎么办 解决方法...
  16. 2018/11/30 快手面试总结
  17. android 设置横屏竖屏
  18. 损失来自粗心 巧设置避免WMP11误删文件
  19. 值得看的十大机器学习公开课
  20. php判断运营商,PHP根据手机号判断运营商

热门文章

  1. 怎么计算计算机的网络地址,如何计算IP地址的网络号和主机号?
  2. 使用手机访问电脑上开发的html页面
  3. lep开发笔记 -- 内存泄漏
  4. 数据权限简单设计思路
  5. 淘宝推荐最靠谱的补单平台排行榜
  6. Java 中文件之魔数
  7. 男人到中年,活得不如一条狗
  8. Python科学计算库(Numpy)基础篇(IDE为Pycharm)- 数组数值计算
  9. java递归函数返回值_java基础5(方法、有无返回值、重载、递归)
  10. DNS中cname记录的作用