首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Angular8:如何编写转换文本输入并将其应用于ngModel的指令

Angular8中,可以通过自定义指令来实现转换文本输入并将其应用于ngModel。下面是一个示例:

首先,创建一个名为"transform-input.directive.ts"的文件,并在其中定义一个名为"TransformInputDirective"的指令类。该指令类需要实现"ControlValueAccessor"接口,以便与ngModel进行交互。

代码语言:txt
复制
import { Directive, ElementRef, HostListener, forwardRef } from '@angular/core';
import { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';

@Directive({
  selector: '[appTransformInput]',
  providers: [
    {
      provide: NG_VALUE_ACCESSOR,
      useExisting: forwardRef(() => TransformInputDirective),
      multi: true
    }
  ]
})
export class TransformInputDirective implements ControlValueAccessor {
  constructor(private el: ElementRef) {}

  // 将输入值转换为大写并更新ngModel的值
  @HostListener('input', ['$event.target.value'])
  onInput(value: string) {
    const transformedValue = value.toUpperCase();
    this.onChange(transformedValue);
  }

  // 实现ControlValueAccessor接口的方法
  writeValue(value: any): void {
    this.el.nativeElement.value = value;
  }

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

  registerOnTouched(fn: any): void {}

  private onChange: (value: any) => void = () => {};
}

接下来,在需要使用该指令的组件模板中,将指令应用于文本输入框,并使用ngModel绑定值:

代码语言:txt
复制
<input type="text" [(ngModel)]="inputValue" appTransformInput>

在上述示例中,当用户在文本输入框中输入内容时,"onInput"方法会被调用,将输入值转换为大写,并通过"this.onChange"方法更新ngModel的值。

这样,当用户输入文本时,该指令会自动将输入值转换为大写并应用于ngModel。

关于Angular8的更多信息,您可以参考腾讯云的Angular产品介绍页面:Angular产品介绍

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

AngularDart4.0 指南- 模板语法二 顶

如何输入框中提取当前显示文本,以便更新数据属性? 谁想每一次都看看? 该ngModel指令隐藏了自己ngModel输入属性和ngModelChange输出属性背后这些繁重细节。...您不需要为您编写Angular组件添加值存取器,因为您可以将值和事件属性命名为适合Angular基本双向绑定语法,完全跳过NgModel。上面显示sizer是这种技术一个例子。...Angular应该能够捕获组件数据属性,使用[(ngModel)]语法将其设置为一个声明: [(ngModel)]是你需要吗...“结构指令”指南介绍了结构指令深入细节,您将在其中学习以下内容: 为什么必须在指令名称前加上前缀星号(*)。 当指令没有合适宿主元素时如何对元素进行分组。 如何编写自己结构指令。...例如,您可以将数字显示为货币,强制文本为大写,或筛选列表对其进行排序。 对于这些小型转换来说,Angular 管道是一个很好选择。 管道是简单函数,它接受一个输入返回一个转换值。

30K20
  • AngularDart4.0 英雄之旅-教程-03英雄编辑器

    文本框应显示英雄名称属性,根据用户类型更新该属性。 您需要在表单元素和hero.name属性之间进行双向绑定。...数据在两个方向流动:从属性到文本框,从文本框返回到属性。 在表单和模板语法页面中阅读有关ngModel更多信息。 @Component(指令:...)...您可以编辑英雄名字,看到立即在文本框上方中反映更改。...您使用Dart模板字符串编写了多行模板,以使模板可读。 您使用内置ngModel指令向元素添加了双向数据绑定。 此绑定显示Hero名称,允许用户更改它。...您还将允许用户选择英雄显示其详细信息。 您将了解有关如何检索列表并将其绑定到模板更多信息。

    3.2K10

    AngularDart 4.0 高级-结构指令

    Angular拥有强大模板引擎,可以让我们轻松操纵元素DOM结构。 本指南介绍Angular如何用结构指令操纵DOM,以及如何编写自己结构指令来完成相同操作。 尝试一下实例(查看源代码)。...但它确实解释了它们是如何工作以及如何编写自己结构指示。 指令拼写 在本指南中,您将看到UpperCamelCase和lowerCamelCase拼写指令。 你已经看到了NgIf和ngIf。...该指南在谈论其属性以及指令功能时引用了指令类。 指南在描述如何指令应用于HTML模板中元素时引用了属性(attribute)名称。...microsyntax解析器将该字符串转换为上属性: let关键字声明了模板中引用模板输入变量。这个例子中输入变量是hero,i和odd。...当你编写自己结构指令时,可以使用这些微观语法机制。 研究NgIf和NgFor源代码是了解更多信息好方法。 模板输入变量 模板输入变量是一个变量,其值可以在模板单个实例中引用。

    16.1K20

    AngularDart4.0 指南- 表单 顶

    一路上你将学习如何: 用组件和模板构建一个Angular表单。 使用ngModel创建读取和写入输入控制值双向数据绑定。 跟踪状态变化和表单控件有效性。...模板驱动形式 您可以通过使用本页中描述特定于表单指令和技术在Angular模板语法中编写模板来构建表单。 您也可以使用响应式(或模型驱动)方法来构建表单。...当你完成时候,你留下一张纸条扔掉它。 关注绑定语法:[(ngModel)] =“...”。 现在运行应用程序输入名称输入,添加和删除字符。 您会看到这些字符出现在诊断文本消失。...指令exportAs属性告诉Angular如何将引用变量链接到指令。 您将name设置为“ngForm”,因为ngModel指令exportAs属性是“ngForm”。...NgForm指令补充表单元素附加功能。 它包含用ngModel和ngControl指令为元素创建控件,监视它们属性,包括它们有效性。

    17.5K30

    AngularDart4.0 指南-体系结构概述 顶

    当Angular呈现它们时,它根据指令给出指示转换DOM。 指令是一个带有@Directive注解类。...属性指令会改变现有元素外观或行为。 在模板中,它们看起来像常规HTML属性,因此也就是名称。 实现双向数据绑定ngModel指令是一个属性指令例子。...ngModel通过设置其显示值属性响应更改事件来修改现有元素(通常是)行为。...如果请求服务实例不在容器中,那么在将服务返回给Angular之前,注入器将创建一个并将其添加到容器中。 当所有请求服务已经解析返回时,Angular可以用这些服务作为参数调用组件构造函数。...Pipes:通过转换显示值来改善用户体验。 Router:在客户端应用程序中从一个页面到另一个页面进行导航,而不会离开浏览器 Testing:为您应用编写组件测试和端到端测试。

    7.9K30

    AngularDart4.0 指南- 模板语法一 顶

    学习如何编写显示数据并在数据绑定帮助下使用用户事件模板。 Angular应用程序管理用户看到和可以做事情,通过组件类实例(组件)和面向用户模板交互来实现这一点。...内置指令 内置属性指令       NgClass       NgStyle       NgModel ([(ngModel)]) 内置结构指令      NgIf      NgFor          ...更多,大括号之间文本是一个模板表达式,Angular首先评估并转换为一个字符串, 通过添加这两个数字来进行以下内插: <!...Angular执行表达式并将其分配给绑定目标的属性; 目标可能是HTML元素,组件或指令。...绑定语法:概述 数据绑定是一种协调用户看到应用程序数据值机制。 虽然您可以将值推送到HTML中,并从HTML中提取值,但是如果将这些杂事转换为绑定框架,则应用程序更易于编写,读取和维护。

    5.2K10

    Angular 从入坑到挖坑 - 组件食用指南

    一、Overview angular 入坑记录笔记第二篇,介绍组件中相关概念,以及如何在 angular 中通过使用组件来完成系统功能实现 对应官方文档地址: 显示数据 模板语法 用户输入 组件之间交互...(refMsgInput.value)"> 通过模板引入变量方式获取到输入值:{{refMsg}} 4.2、指令 4.2.1、属性型指令 属性型指令被应用在视图 dom 元素上,用来改变...,可以使用管道对于表达式结果进行转换 管道是一种简单函数,它们接受输入返回转换值。...管道 作用 JsonPipe 将一个值转换成 json 字符串 DatePipe 根据区域设置规则格式化日期值 UpperCasePipe 把文本转换成全大写形式 LowerCasePipe 把文本转换成全小写形式...4.4、组件之间通信 4.4.1、输入属性与输出属性 输入属性(@Input)和输出属性(@Output)用来在父子组件或指令中进行共享数据。

    15.8K30

    Angular开发者手册重点翻译之指令(一)文本和属性绑定ngAttr属性绑定

    创建自定义指令 这个文章将解释什么需要在自己angularjs应用中创建自己指令,以及如何实现它。...什么是指令 在高层面上讲,指令是DOM元素中标记(例如一个属性,一个节点名,注释或者CSS类),它告诉angularjs编译器去给这个元素附加一个指令行为或者转换DOM元素和它子元素。...Angularjs拥有一些内建指令,像ngBind、ngModel和ngClass。...匹配指令 在你可以编写指令之前,你需要知道当你使用一个给定指令时候,angularjshtml编译器是怎样工作....文本和属性绑定 在编译工作阶段,编译器使用$interpolate服务匹配文本和属性,它将发现他们是否包含嵌入表达式。

    1.7K60

    angularjs 表单验证

    最小长度 验证表单输入文本长度是否大于某个最小值,在输入字段上使用指令ng-minleng= "{number}": 3...最大长度 验证表单输入文本长度是否小于或等于某个最大值,在输入字段上使用指令ng-maxlength="{number}": <input type="text" ng-maxlength="20"...ngModel从DOM中读取值会被传入$parsers中函数,依次被其中解析器处理。这是为了对值进行处理和修饰。 备注:ngModel....$setViewValue()方法适合于在自定义指令中监听自定义事件(比如使用具有回调函数jQuery插件),我们会希望在回调时设置$viewValue执行digest循环。...它和$parser流水线互不影响,用来对值进行格式化和转换,以便在绑定了这个值控件中显示。

    6.7K70

    AngularDart 4.0 高级-管道 顶

    介绍Angular管道,这是一种编写显示值转换方法,您可以在HTML中声明这些转换。 尝试一下实例(查看源代码)。 使用管道 管道将数据作为输入将其转换为所需输出。...管道类实现了PipeTransform接口transform方法,该方法接受一个输入值,后跟一个可选参数返回转换值。 对于传递给管道每个参数,transform方法都会有一个额外参数。...PipeTransform接口定义该方法指导工具和编译器。 从技术上讲,这是可选; 无论角度如何,Angular都会查找执行transform方法。 现在您需要一个组件来演示管道。...纯函数处理输入返回值,但没有可检测到副作用。 给定相同输入,他们应该总是返回相同输出。 本页前面讨论管道是用纯函数实现。 内置DatePipe是一个纯函数实现纯管道。...尝试编写一个自定义管道,并可能将其贡献给社区。 附录:无FilterPipe或OrderByPipe Angular不提供过滤或排序列表管道。

    6.4K20

    Angular 英雄编辑器

    编辑英雄 用户应该能在一个  文本输入框(textbox)中编辑英雄名字。 当用户输入时,这个输入框应该能同时显示和修改英雄 name 属性。...虽然 ngModel 是一个有效 Angular 指令,不过它在默认情况下是不可用。 它属于一个可选模块 FormsModule,你必须自行添加此模块才能使用该指令。...AppModule Angular 需要知道如何把应用程序各个部分组合到一起,以及该应用需要哪些其它文件和库。 这些信息被称为元数据(metadata)。...你使用 UppercasePipe 来格式化英雄名字。 你用 ngModel 指令实现了双向数据绑定。 你知道了 AppModule。...你把 FormsModule 导入了 AppModule,以便 Angular 能识别应用 ngModel 指令

    2.6K70

    Angular 英雄编辑器

    编辑英雄 用户应该能在一个  文本输入框(textbox)中编辑英雄名字。 当用户输入时,这个输入框应该能同时显示和修改英雄 name 属性。...虽然 ngModel 是一个有效 Angular 指令,不过它在默认情况下是不可用。 它属于一个可选模块 FormsModule,你必须自行添加此模块才能使用该指令。...AppModule Angular 需要知道如何把应用程序各个部分组合到一起,以及该应用需要哪些其它文件和库。 这些信息被称为元数据(metadata)。...你使用 UppercasePipe 来格式化英雄名字。 你用 ngModel 指令实现了双向数据绑定。 你知道了 AppModule。...你把 FormsModule 导入了 AppModule,以便 Angular 能识别应用 ngModel 指令

    2.5K50

    Angular 从入坑到挖坑 - 表单控件概览

    一、Overview angular 入坑记录笔记第三篇,介绍 angular 中表单控件相关概念,了解如何在 angular 中创建一个表单,以及如何针对表单控件进行数据校验。...四、Step by Step 4.1、表单简介 用来处理用户输入,通过从视图中捕获用户输入事件、验证用户输入是否满足条件,从而创建出表单模型修改组件中数据模型,达到获取用户输入数据功能 模板驱动表单...,使用 ngModel 完成组件与模板之间数据双向绑定 姓名:...在使用 ngModel 进行模板绑定时,angular 在 form 标签上自动附加了一个 NgForm 指令,因为 NgForm 指令会控制表单中带有 ngModel 指令和 name 属性元素,而...4.2.3、数据有效性验证 某些时候需要对于用户输入信息做有效性验证,此时可以在控件上添加上原生 HTML 表单验证器来设定验证条件,当表单控件数据发生变化时,angular 会通过指令方式对数据进行验证

    18.9K20

    Angular学习笔记(一)

    providers - 服务创建者,加入到全局服务列表中,可用于应用任何部分。 bootstrap - 指定应用主视图(称为根组件),它是所有其它视图宿主。...组件 组件负责控制视图,通过一些由属性和方法组成 API 与视图交互。 模板 模板以 HTML 形式存在,告诉 Angular 如何渲染组件。 元数据 元数据告诉 Angular 如何处理一个类。...指令 Angular 模板是动态。当 Angular 渲染它们时,它会根据指令提供操作对 DOM 进行转换。 服务 服务是一个广义范畴,包括:值、函数,或应用所需特性。...当被绑定输入属性值发生变化时调用,首次调用一定会发生在 ngOnInit() 之前。...ngOnInit() 在 Angular 第一次显示数据绑定和设置指令/组件输入属性之后,初始化指令/组件。 在第一轮 ngOnChanges() 完成之后调用,只调用一次。

    3.3K20
    领券