angular 如何实现ng-model

2023-11-04

最近在用angular5写项目,刚接触angular,他对于我还是陌生的朋友,最近写了一个组件 用到了ng-model的实现,所以这里简单记录下

比如要创建一个组件叫my-input

1首先 

在@Component配置中添加encapsulation的配置,它有三个值分别是

ViewEncapsulation.None:没有Shadow Dom,样式没有封装,全局可以使用。

ViewEncapsulation.Emulated:angular2的默认值,模仿ShadowDom,通过在标签上增加标识,来固定样式的作用域

ViewEncapsulation.Native:使用原生的Shadow Dom

一般使用默认值ViewEncapsulation.Emulated

2 配置providers

providers:[{

    provide:NG_VALUE_ACCESSOR,

    useExisting:forwardRef(()=>{MyInputComponent}) ,//这里是组件的名字

    multi:true

}]

//@Component完整代码
@Component({
   selector:'app-my-input',
   templateUrl:'./my-input.component.html',
   styleUrls:['./my-input.component.scss'],
   encapsulation:ViewEncapsulation.Emulated,
   providers:[{
     provide:NG_VALUE_ACCESSOR,
     useExisting:forwardRef(()=>MyInputComponent),
     multi:true
   }]
})

 3 MyINputComponent要实现ControValueAccessor这个接口

它有3个方法  writeValue(obj:any):void和registerOnChange(fn:any):void    registerOnTouched(fn:any):void要实现

实现了这三个方法基本就可以实现数据的输出

数据的输入是通过@Input data获取的

export class MyInputComponent implements OnInit,ControlValue{
  @Input() data:string;

  onChange: any=Function.prototype;
  onTouched: any=Function.prototype;
 

  constructor(){}

  writeValue(obj:any):void{
     this.data = obj;
  }

  registerOnChange(fn:any):void{
     this.onChange=fn
  }

  registerOnTouched(fn:any):void{
     this.onTouch=fn
  }
//自定义方法   当数据改变的时候
  dataChange(){
     this.onChange(this.data)
  }

}

 

 

 

 

 

 

 

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

angular 如何实现ng-model 的相关文章

随机推荐

  • 两个有序链表的合并(超详细)

    不知道大家有没有做过一道经典的题目 两个长度为15的有序链表的合并 大家先看题目 那么这道题该如何做尼 首先我们用比较笨的办法 用链表做 首先我们创建两个链表 那么该如何将两个链表合并尼 只需要创建两个指针 指向两个链表 然后比较两个链表中
  • Git的一些命令行

    1 创建一个分支git branch 分支名字 2 提交git commit 3 换主支git checkout 要换到的名字那儿 4合并git merge 分支名字 合并到当前那个支上 且那个支会指向两个父节点 5 git rebase取
  • 南溪的远程桌面软件使用笔记

    1 介绍 远程桌面软件可以让我们远程操作另一个主机的用户界面 Note TeamViewer付费一次后 就会强制自动续费一年 如果取消订阅需要提前续订日期前至少28天 28天的提前期实在太长了 TeamViewer这个公司十分黑心 以后注意
  • TensorFlow 2.0深度强化学习指南

    在本教程中 我将通过实施Advantage Actor Critic 演员 评论家 A2C 代理来解决经典的CartPole v0环境 通过深度强化学习 DRL 展示即将推出的TensorFlow2 0特性 虽然我们的目标是展示Tensor
  • 单链表的基本设计及实际操作

    单链表的基本设计 C语言代码实现 1 单链表概念 设计 单链表是一种链式存取的数据结构 链表中的数据是以结点来表示的 每个结点的构成 元素 数据元素的映象 指针 指示后继元素存储位置 元素就是存储数据的存储单元 指针就是连接每个结点的地址数
  • 如何安装Apache服务

    目录 什么是Apache 第一步 关闭防火墙和安全机制 第二步 系 统 上 定 义 SELinux 最 高 级 别 第三步 导入对应的依赖包并解包 第四步 安装依赖环境 第五步 移动相关文件 第六步 编译安装 第七步 编译 第八步 备份配置
  • git 提交代码到错误分支如何解决

    IDEA 中 当我们修改代码提交后 才发现提交到了错误的分支上 这时如何处理 切换到正确的分支 在刚刚的错误提交上 右键 gt 点击 cherry pick 择优选择 push 推送代码到仓库 注 cherry pick 时 可能提示 yo
  • vue实现移动端适配方案

    vue实现移动端适配步骤如下 先安装amfe flexible和postcss pxtorem npm install amfe flexible save npm install postcss pxtorem save 在main js
  • C++ const 修饰函数

    const int fun int a 修饰返回值 int fun const int a 修饰形参 int fun int a const const成员函数 const修饰返回值 多是修饰返回值是引用类型的情况下 为了避免返回值被修改的
  • 前端基础汇总-html、css

    文章目录 1 HTML5新特性 2 HTML5语义化 3 CSS盒子模型 W3C盒子模型 标准盒模型 IE盒子模型 怪异盒模型 盒子塌陷 盒子塌陷解决方法 4 样式优先级 选择器类型 权重计算规则 比较规则 5 CSS继承 6 css 伪类
  • 剑指Offer数组专题

    剑指 Offer II 002 二进制加法 二进制 字符串转整型 给定两个 01 字符串 a 和 b 请计算它们的和 并以二进制字符串的形式输出 输入为 非空 字符串且只包含数字 1 和 0 示例 1 输入 a 11 b 10 输出 101
  • Python+Selenium自动化测试(六):测试驱动TDD

    文章目录 一 为什么要使用ddt模块 二 ddt模块 三 CSV文件处理 四 xlsx文件处理 一 为什么要使用ddt模块 测试驱动开发模式 要求开发在写业务代码的时候 先写出测试代码 同时单元测试例子决定了如何来写产品的代码 并且不断的成
  • spring mvc 2.5.6配置

    兼容公司老版本项目 必须得用spring mvc2 5 6 那么问题来了 怎么配置controller都抛出no mapping的错误 经过查文档得出以下配置 仅供参考 servlet config xml
  • 让特定软件使用独显/集显的解决方法

    今天下载OBS Studio 一款直播 录制软件 但是配置显示器捕获 输出黑屏 原因是软件需要在集显环境下运行 然而日常写图形学的弱鸡还得用独显赶ddl呢 所以我们可以给特定软件配置默认显卡 设置 gt 显示 gt 图形设置 gt 浏览 g
  • 7-10 求解矩阵最小路径和问题 (12 分)

    给定一个m行n列的矩阵 从左上角开始每次只能向右或者向下移动 最后到达右下角的位置 路径上的所有数字累加起来作为这条路径的路径和 求所有路径和中最小路径和 输入格式 首先输入行数m及列数n 接下来输入m行 每行n个数 输出格式 输出第一行为
  • JS增删改查常用方法

    1 增 常规方法 arr push aaa 在数组后添加aaa 返回新数组长度 arr unshift aaa 在数组首位添加aaa 返回新数组长度 arr i aaa 与push一样 非常规方法 arr splice 2 0 lll qq
  • Kafka源码阅读

    工程版本与工程建立 kafaka 使用scalar java 语言编写 kafaka 源码阅读版本 kafka 0 10 1 1 工程建立 1 安装 JDK8 2 安装 gradle 3 0 3 下载安装IDEA 社区版 免费 4 用IDE
  • 华为OD机试 C++ 矩阵稀疏扫描

    题目 描述 题目描述 一个矩阵 如果其中大部分元素都是0 我们就称它为 稀疏矩阵 稀疏矩阵在实际应用中很常见 处理这种矩阵可以大大提高计算效率 现在 你得到了一个矩阵 要求你检查哪些行和列是 稀疏 的 稀疏 的定义是 当一个行或列中的0的数
  • Java基础——this,super,构造函数

    this this是正在访问的代码所属的对象 是一个对象 关键字this有两个用途 引用隐式参数 调用该类其他的构造器 super super关键字有两个用途 调用超类的方法 调用超类的构造器 构造函数 构造函数可以重载 但是不能被继承 也
  • angular 如何实现ng-model

    最近在用angular5写项目 刚接触angular 他对于我还是陌生的朋友 最近写了一个组件 用到了ng model的实现 所以这里简单记录下 比如要创建一个组件叫my input 1首先 在 Component配置中添加encapsul