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

Posted

技术标签:

【中文标题】如何将变量放入语句 [Angular,TypeScript]【英文标题】:How to put Variable in Statement [Angular, TypeScript] 【发布时间】:2021-12-12 03:37:22 【问题描述】:

这是在 Angular 中, 我想使用 variable 来改变我的 conditional statement 所以我不需要修改每个变量并再次输入 这是输入标记 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)"
>

所以每次有新的输入(例如姓名、电子邮件、组织化等)时,我的代码都会改变

我想构建一个函数,我可以传递一些字符串,并让它变得超级好,不用一直用长线进行修改。 例如:

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

所以我可以用作...

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

请问,我可以这样做还是不这样做?还是仅适用于字符串,而不适用于条件?

【问题讨论】:

这应该是可能的,但发布更多代码可能会有所帮助(例如 this.f 是什么)。使用打字稿,您应该可以访问复杂类型,并且每个字段可能具有相同的类型。在您的示例中,姓名、电子邮件、地址都应该具有相同的类型,其中包含脏、无效的字段。感动。无需将名称传递给函数,只需传递对象本身 checkCondition(f.name)。然后在您的 checkCondition 函数中,您可以检查 thing.valid、thing.dirty 等... 指定您使用的内容对于获得问题的最佳答案很重要。我猜您可能正在以某种组合使用输入字段或表单。如果是这样的话,我很肯定这个网站上已经有问题和答案可以解决您的问题。也许这个? ***.com/questions/43553544/… 哦,我忘记了:P,我添加了一些更必要的代码。看看吧! 不,我不明白那个帖子(可能是我去纽比@-@)但我认为这不是我的意思,但顺便说一句,非常感谢你:) 【参考方案1】:

看起来你离得很近。这应该工作。

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>

这是一个有效的stackBlitz

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

【讨论】:

有意思,我试试 第一个看起来很不错,但第二个很好,但不能返回布尔值,因为你在这里有'is-invalid'组合->我尝试从布尔值更改为任何 哇,太棒了!你的代码工作得很好。但请从返回“布尔”编辑您的第二个块代码的“任何”:) 非常感谢 更多问题 Drake。 this.f[key] btw 是什么意思。我想知道该代码是如何工作的? 这被称为括号表示法。您应该只在尝试访问对象中的键并且该键是变量时使用它。这里有一篇好文章codeburst.io/…如果这对你有用,请标记为已接受的答案。

以上是关于如何将变量放入语句 [Angular,TypeScript]的主要内容,如果未能解决你的问题,请参考以下文章

如何将多行语句字符串放入变量中? [复制]

如何将 jQuery 导入 Angular2 TypeScript 项目?

如何将变量值与 select 语句的结果一起放入 sql 表中?

学习记录--如何将exec执行结果放入变量中?

如何使用准备好的语句将布尔值放入 mysql 数据库?

如何将数据库查询结果放入变量中