我试图为所有"Required"属性设置为True的输入字段显示一个明确的"Required"占位符文本.

所以基本上是一样的

<mat-form-field>
  <input formControlName="fieldName" matInput required="true" placeholder="Required">
</mat-form-field>

而是以编程方式用于所有必填字段.表单域在组件初始化时根据各种条件设置为必填状态.

如果有一种方法可以为ANGLE应用程序的所有组件/页面做到这一点,而不仅仅是一个组件,那就更好了!

推荐答案

要将指令应用于几个元素,我们使用 Select 符

在本例中, Select 器是具有属性"formControl"或属性"formControlName"的标记"Input".

import {
  Directive,
  ElementRef,
} from '@angular/core';
import { NgControl, Validators } from '@angular/forms';

@Directive({
  selector: 'input[formControlName],input[formControl]',
  standalone: true,
})
export class AddPlaceholderDirective {
  constructor(private control: NgControl, private element: ElementRef) {}

  ngAfterViewInit() {
    if (this.control.control?.hasValidator(Validators.required) &&
        !this.element.nativeElement.placeholder) {
      this.element.nativeElement.placeholder = 'required';
    }
  }
}

Update一个简短的解释:

指令可以是" struct 指令"和"attributes directives".

属性指令为我们的htmlElement甚至我们的组件提供了新的特征,但如何工作呢?

当我们有一个像[myDirective]这样的 Select 器时,所有具有这个"属性"的HTMLElement都会使用新的特性进行改进.(这就是命名ATTRIBUTE指令的原因)

例如,当有

@Directive({
  selector: '[myDirective]',
  standalone: true,
})
export class MyDirective {
  constructor(private element: ElementRef) {
     console.log("I'm a super div")
  }
}

//and write

<div myDirective>Hello</div>

这个div不是一个简单的div,否则就是一个"超级div"(是的,只在控制台中说"我是一个超级div",但让"一些不同的东西,一个简单的div")

struct 指令有一个" Select 符",通常是一个介于[``]之间的简单字符串,但 Select 符可以不同,请参见the docs

因此,像input[formControl]这样的 Select 器为属性为"formControl"的所有输入赋予新的超能力,而像input[type="radio"]这样的 Select 器为属性类型为"Radio"的所有输入赋予新的超能力.

我知道formControl是另一个指令,但它也是一个属性.

注意:"属性指令"的好处是,当应用于HTMLElement或组件时,我们可以在构造函数中获得htmlElement或组件,这就是我们可以使用

constructor(private elementRef:ElementRef,control:NgControl){}

我们在所有属性指令中都有"elementRef",它是我们自己的"htmlElement",我们在其中添加属性.

"ngControl"是因为我们有一个带有FormControl或FormControlName的ngModel的输入

Html相关问答推荐

如何在Vim中删除Html标签?

在元素之间添加空格

创建带有弯曲边框的水平时间线

如何更改计时器S输入的Angular 字体大小?

如何更改Django中的默认按钮?

Html视频标签:圆角像素化

默认情况下使用Disbale Scroll,但在单击图标后将其激活

列表项文本在占据剩余空间之前在标记下换行

如何 Select 表格';TMS Web Core中的body html元素?

在移动屏幕上显示时分支树视图的响应能力问题

在 html 和 css 中绘制表格内的倾斜线

如何保持块扩展以填充视口?

带标签 css 的 div 内的中心图标

CSS Grid 布局:1 大图和 3 小图

如何调整底部有 SVG 的元素的高度,使其在所有宽度上看起来都不错?

视频添加到 Html 与 Github 不同步

用于表行组标题的正确 HTML 标记是什么?

Tailwind CSS 复选框样式不起作用

使用 golem 框架在shiny 的应用程序中存储背景图片的位置

在 EJS 中将元素放置在彼此下方的列中