当前位置: 首页 > 知识库问答 >
问题:

如何将变量放入语句[Angular,TypeScript]

陈文景
2023-03-14

这是在Angular中,我想使用变量来更改我的条件语句,这样我就不需要修改每个变量并再次键入这是输入标记HTML中的代码。

import { FormBuilder, FormGroup, Validators } from '@angular/forms';

.

    public form: FormGroup;
    private formBuilder: FormBuilder

.

   get f() { return this.form.controls; }

.

   this.form = this.formBuilder.group({
      id: ['00000000-0000-0000-0000-000000000000'],
      name: ['', Validators.required],
      email: ['', [Validators.required, Validators.pattern("^[a-z0-9._%+-]+@[a-z0-9.-]+\\.[a-z]{2,4}$")]],
      oraganize: ['', Validators.required],

    });

.

<input
    ...
    [ngClass]="{'is-invalid': f.name.invalid && (f.name.dirty || f.name.touched)}"
>

所以每次有新的输入,如姓名、电子邮件、oraganize等,我的代码都会改变

我想建立一个函数,我可以传递一些字符串,让它超级好,不修改所有的时间与长线。

  public checkCondition(attribute: string): boolean{
    return (`this.f.${attribute}.invalid && (this.f.${attribute}.dirty || this.f.${attribute}.touched)`);
  }

所以我可以用作...

<input
    ...
    [ngClass]="{'is-invalid': checkCondition("name")}"
>

拜托,我能不能这样做?或者它只对字符串有效,而不是对条件有效?

共有1个答案

凌运恒
2023-03-14

看起来你离得很近。这应该行得通。

public checkCondition(key: string): boolean{
    return this.f[key].invalid && (this.f[key].dirty || this.f[key].touched);
  }

或者你可以进一步简化它

public checkCondition(key: string): boolean{
    return {
      'is-invalid': this.f[key].invalid && (this.f[key].dirty || this.f[key].touched) 
    };
  }

而你html

<input [ngClass]="checkCondition('name')" />

这是它在一起的样子

import { Component } from '@angular/core';
import { FormBuilder, Validators } from '@angular/forms';

@Component({
  selector: 'my-app',
  templateUrl: './app.component.html',
  styleUrls: ['./app.component.css'],
})
export class AppComponent {
  form = this.formBuilder.group({
    id: ['00000000-0000-0000-0000-000000000000'],
    name: ['', Validators.required],
    email: ['', [Validators.required, Validators.pattern("^[a-z0-9._%+-]+@[a-z0-9.-]+\\.[a-z]{2,4}$")]],
    oraganize: ['', Validators.required],
  });

  constructor(private formBuilder: FormBuilder) {}

  checkCondition(key: string) {
    const control = this.form.get(key);

    if (!control) {
      return;
    }

    return {
      'is-invalid': control.invalid && (control.dirty || control.touched) 
    };
  }

}
<form [formGroup]="form">
  <input formControlName="id" [ngClass]="checkCondition('id')" />
  <input formControlName="name" [ngClass]="checkCondition('name')" />
  <input formControlName="email" [ngClass]="checkCondition('email')" />
  <input formControlName="oraganize" [ngClass]="checkCondition('oraganize')" />
</form>

这是一场有效的闪电战

https://stackblitz.com/edit/angular-ivy-cvwmis?file=src/app/app.component.html

 类似资料:
  • 是否可以在if语句中放一个runnable,因为我需要它,如果玩家下面有一个凿砂岩,那么它应该在5秒后取出块,是可以这样做还是需要另一种方式?Intellij创意,java插件Minecraft。代码:

  • 问题内容: 我想将JavaScript变量添加到php echo中 谢谢 问题答案: 你不能 PHP在服务器上运行,并输出一些文本。 文本发送到浏览器 浏览器将文本解释为HTML / JavaScript / etc 在执行JavaScript时,PHP已完成运行。 如果要传回数据,则需要发出 新的 HTTP请求并从头开​​始运行PHP脚本。

  • 问题内容: 是否可以将变量放入字符串资源中?如果是的话-我该如何使用它们。 我需要的是以下内容: 并用int代替%X。 问题答案: 从这里取的例子

  • 问题内容: 因此,我试图创建一个“动态”文档字符串,如下所示: 基本上让文档字符串显示所有内容;因此,当更新此变量时,文档字符串将自动更新。 不幸的是,它似乎不起作用。有谁知道有没有办法实现这一目标? 问题答案: 三引号字符串是一个大字符串。它们内部没有任何评估。该部分是字符串的所有部分。您需要使它在实际的字符串上运行。 ~~~~ 我不确定这是否可以正常工作;docstrings有点神奇。这将 不

  • 我使用java PreparedStatment对象来构造一系列批处理的插入查询。查询语句的格式为。。。 ...所以字段值和表名都是变量(即。我有多个具有相同列格式的表,每个插入都将定向到不同的表)。如果我删除“?”tablename变量和硬代码,我可以让执行程序正常工作,但每个准备好的语句都将插入到不同的表中,因此需要保留一个我在使用...执行批处理查询之前立即填充的变量... 我怎样才能让它成