关于角度反应形式的问题,一种用于以反应式方式创建表格的角度技术。将此标记用于不是特定于单个Angular版本的问题。
我正在使用 Angular 16。我有一个父组件:ComponentA,其路由为“/parent-component/:customId”。 ComponentA 有两个子路由:ChildComponent1 带有路由“/child1”,ChildComponent2 带有...
我使用ReactiveForms。我有一个登录组件,其中使用两个输入字段(电子邮件和密码)。这些输入字段都来自同一个自定义组件“TextFieldComponent”。我尝试添加一个
对象可能为“空”。元素隐式具有“any”类型,因为类型“controls”的表达式不能用于索引类型“AbstractControl”。 属性“控制”...
使用 @Input 填充 Angular 表单,其中数据来自服务注入且来自 Firebase 数据库
我一直在努力解决 Ionic Angular 中表单的一些问题。 我有一个组件,它基本上是一个由输入(组件)填充的表单。 问题是,它的形式似乎......
条件验证器可能被问过很多次了。但我永远找不到的是何时调用该验证器。 假设我有一个只有两个字段的表单 this.form = formBuilder.group...
我有一个人形,它具有一些基本属性,并且还有一个名为亲戚的节点 让 personFormGroup = this.fb.group({ id: 新的 FormControl(), 性别:new FormControl(), ...
我正在订阅 HTTP 服务器以接收数据,之后我的选择控件将通过 Angular 框架加载数据。 我的目标是设置默认值。 我的默认值是...
我是 Angular 新手,我使用模型进行了 API POST,但该模型与我的 FormGroup 不兼容,而且我不明白如何设置 FormGroup。我想,我必须放一些东西......
如何从 API 请求向 Angular 中的 formControl 设置值?
我有一个从 REST API 获取数据的服务。返回看起来像这样: { “用户”:[ { “id”:1, “名字”:“约翰”, “电子邮件”:...
Angular 4:反应式表单控件通过自定义异步验证器陷入挂起状态
我正在构建一个 Angular 4 应用程序,它需要对多个组件中的表单字段进行 BriteVerify 电子邮件验证。我正在尝试将此验证实现为我可以使用的自定义异步验证器
电子邮件验证与 Angular Reactive 表单中所需的重叠
使用 Angular Reactive Forms 验证电子邮件。 我添加了所需的验证程序和验证程序电子邮件,但它显示两者,如下图所示。我只想在某一时刻显示一个错误...
我正在使用 Angular Reactive 表单创建一个表单,出于用户体验的原因,我尝试在 f...
如何使用响应式表单 Angular 的 html 标签显示内容
Component.html 组件.ts this.formName.patchValue({ 标题=这个.内容 }) 一些...
我找了很久也没找到我想做的事。我想添加具有角度 5 和反应形式的动态键/值。 当我点击“添加参数”按钮时,会出现 2 个输入
我有一个用于调查的角度反应形式。 ts 文件如下所示: 调查表格 = 新表格组({ 问题1:new FormControl(), 问题2:new FormControl(), 问题3:新FormCo...
我正在处理这个代码: 登录.component.html 我正在处理这个代码: 登录.component.html <div class="main"> <div class="image"> <img src="./assets/icons/login.png" alt="Login"> <p>Login in to your account</p> </div> <form [formGroup]="form" class="login" (ngSubmit)="onClick()"> <p class="error-message" style="font-size: large;" *ngIf="!isValid">Please fill the your info</p> <p>Enter your user name and password</p> <div class="userName"> <label for="userName">User name</label> <br> <input [ngClass]="{'error': emailValidation && !isValid}" type="text" id="userName" placeholder="Your user name" formControlName="email"> <p class="error-message" *ngIf="emailValidation && !isValid">please enter your user name</p> </div> <div class="pass"> <label for="pass">Password</label> <br> <input [ngClass]="{'error': passwordValidation || !isValid}" type="password" id="pass" placeholder="your password" formControlName="password"> <p class="error-message" *ngIf="passwordValidation || !isValid">please enter your user password</p> </div> <button class="btnConfig" id="btnlogin"><img src="./assets/icons/login-btn.png" alt="login"> Login</button> </form> </div> 登录.组件.ts: import { AfterContentChecked, Component, DoCheck, OnChanges, OnInit, SimpleChanges } from '@angular/core'; import { FormGroup, FormBuilder, Validators } from '@angular/forms'; import { Router } from '@angular/router'; @Component({ selector: 'app-login', templateUrl: './login.component.html', styleUrls: ['./login.component.css'] }) export class LoginComponent implements OnInit, DoCheck { form!: FormGroup; isValid: boolean = true; constructor (private formBuilder: FormBuilder, private router: Router) {} ngOnInit(): void { this.form = this.formBuilder.group({ email: ['', Validators.required], password: ['', Validators.required] }); this.form.valueChanges.subscribe() } ngDoCheck(): void { this.form.valueChanges.subscribe(() => { this.isValid = this.form.valid; }); } get emailValidation() { return this.form.get('email')?.invalid || this.form.get('email')?.touched; } get passwordValidation() { return this.form.get('password')?.invalid && this.form.get('password')?.touched; } onClick() { if(this.form.valid) { this.router.navigate(['/dashboard']); } else { this.isValid = this.form.valid; } } } 实时预览 验证一切正常,直到我按下登录按钮,两个输入字段为空,错误消息显示。当我只填写其中一个输入时,错误消息就会从两个字段中消失。 我试过了 ngDoCheck(): void { this.form.valueChanges.subscribe(() => { this.isValid = this.form.valid; }); } 继续检查,但错误仍然没有消失。 我通过删除 ngDoCheck 来修复问题,将订阅放入 ngOnInit 中, 将 isVaild 替换为 isSubscribed,编辑passwordValidation 和 emailValidation,将 OnClick 编辑为 onSubmit 登录.组件.ts: import { AfterContentChecked, Component, DoCheck, OnChanges, OnInit, SimpleChanges } from '@angular/core'; import { FormGroup, FormBuilder, Validators } from '@angular/forms'; import { Router } from '@angular/router'; @Component({ selector: 'app-login', templateUrl: './login.component.html', styleUrls: ['./login.component.css'] }) export class LoginComponent implements OnInit { form!: FormGroup; isSubmitted: boolean = false; constructor (private formBuilder: FormBuilder, private router: Router) {} ngOnInit(): void { this.form = this.formBuilder.group({ email: ['', Validators.required], password: ['', Validators.required] }); this.form.valueChanges.subscribe() } get emailValidation() { return this.form.get('email')?.invalid && (this.form.get('email')?.dirty || this.form.get('email')?.touched || this.isSubmitted); } get passwordValidation() { return this.form.get('password')?.invalid && (this.form.get('password')?.dirty || this.form.get('password')?.touched || this.isSubmitted); } onSubmit(): void { if(this.form.valid){ this.router.navigate(['/dashboard']) } this.isSubmitted = true; } } login.component.html: <div class="main"> <div class="image"> <img src="./assets/icons/login.png" alt="Login"> <p>Login in to your account</p> </div> <form [formGroup]="form" class="login" (ngSubmit)="onSubmit()"> <p class="error-message" style="font-size: large;" *ngIf="isSubmitted">Please fill the your info</p> <p>Enter your user name and password</p> <div class="userName"> <label for="userName">User name</label> <br> <input [ngClass]="{'error': emailValidation}" type="text" id="userName" placeholder="Your user name" formControlName="email"> <p class="error-message" *ngIf="emailValidation">please enter your user name</p> </div> <div class="pass"> <label for="pass">Password</label> <br> <input [ngClass]="{'error': passwordValidation}" type="password" id="pass" placeholder="your password" formControlName="password"> <p class="error-message" *ngIf="passwordValidation">please enter your user password</p> </div> <button class="btnConfig" id="btnlogin" type="submit"><img src="./assets/icons/login-btn.png" alt="login"> Login</button> </form> </div>
我正在研究 Angular 反应形式。表格中的第一个问题询问用户最喜欢的水果是什么。我想添加一个“其他”选项 我正在研究 Angular 反应形式。表格中的第一个问题询问用户最喜欢的水果是什么。我想添加一个“其他”选项 <p> <label for="favFruit"><b>What's your favorite fruit</b></label> <br> <input type="radio" value="Apple" id="favFruit" name="favFruit" formControlName="favFruit"> Apple <br> <input type="radio" value="Banana" id="favFruit" name="favFruit" formControlName="favFruit"> Banana <br> <input type="radio" value="Orange" id="favFruit" name="favFruit" formControlName="favFruit"> Orange <br> <input type="radio" value="Pear" id="favFruit" name="favFruit" formControlName="favFruit"> Pear <br> <input type="radio" value="Grapes" id="favFruit" name="favFruit" formControlName="favFruit"> Grapes <br> <input type="text" value="" id="favFruit" name="favFruit" formControlName="favFruit"> </p> 我尝试过添加另一个值作为文本输入字段,但是,这允许用户选择多个选项。我希望当用户单击“其他”时会弹出其他选项,以便用户可以选择其他选项,但这将是他们唯一的选择。 我建议用于填充其他值的 <input> 元素不要使用 formControlName 指令。 当输入文本字段时,它应该更新 favFruit 控制值,这会导致取消选中之前选中的单选按钮。 <input type="text" value="" id="favFruit" name="favFruit" #otherFavFruit (input)="onOtherFavFruitInput(otherFavFruit.value)"> onOtherFavFruitInput(value: string) { this.form.controls.favFruit.setValue(value); } 另一种情况是,当您在文本字段中输入其他值时,您改变主意并选择其中一个单选按钮,您可以使用 (change) 事件来重置输入字段。 <input type="radio" value="Apple" id="favFruit" name="favFruit" formControlName="favFruit" (change)="onFavFruitChecked($event)"> import { Component, ElementRef, ViewChild } from '@angular/core'; @ViewChild('otherFavFruit') otherFavFruit!: ElementRef<HTMLInputElement>; onFavFruitChecked(event: any) { this.otherFavFruit.nativeElement.value = ''; } 请注意,您可以使用 *ngFor 生成一组表单控件,旨在减少 HTML 中的代码。 <ng-container *ngFor="let fruit of fruits"> <input type="radio" [value]="fruit" id="favFruit" name="favFruit" formControlName="favFruit" (change)="onFavFruitChecked($event)"> {{ fruit }} <br> </ng-container> fruits = ['Apple', 'Banana', 'Orange', 'Pear', 'Grapes']; 演示@StackBlitz
(Angular 5)错误:无法读取未定义的属性“setValue”
我正在以这种方式初始化我的表单,但是当我需要编辑它时,它不接受这些值 组件.ts ngOnInit() { this.tinvoiceService.initForm(); } 语音服务.ts 表单:表单组;
用作输入时,FormGroup 不会发生 Angular 类型断言
我在不同的组件中有多种形式。我正在使用 formBuilder 为类型化表单创建 formGroups。当我通过 @Input 将创建的 formGroups 传递给子组件时,我不...
NG01203:mat-radio-group 的表单控件名称没有值访问器
单元测试失败,显示 Error: NG01203: No value accessor for form control name : 'gender' 。我已经使用了 NG_VALUE_ACCESSOR 但仍然相同。我正在使用响应式表单,HTML 代码是 单元测试失败,提示 Error: NG01203: No value accessor for form control name : 'gender' 。我已经使用了 NG_VALUE_ACCESSOR 但仍然相同。我正在使用响应式表单,HTML 代码是 <mat-radio-group aria-label="Select an option" class="w-48" id="gender" name="gender" formControlName="gender" > <mat-radio-button value="Male" name="male">Male</mat-radio-button> <mat-radio-button value="Female" name="female">Female</mat-radio-button> </mat-radio-group> 我在这里做错了什么 { provide: NG_VALUE_ACCESSOR, useExisting: myComponent, multi: true } 确保您拥有正确的值访问器: 验证您使用的是正确的值访问器令牌 (NG_VALUE_ACCESSOR) 并且它与您的自定义表单控件实现相匹配。 检查您的自定义表单控件: 确保您已在自定义表单控件组件中正确实现了 ControlValueAccessor 接口。 import { Component, forwardRef } from '@angular/core'; import { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms'; @Component({ selector: 'app-custom-radio-group', template: ` <mat-radio-group [value]="value" (change)="onChange($event)"> <ng-content></ng-content> </mat-radio-group> `, providers: [ { provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => CustomRadioGroupComponent), multi: true, }, ], }) export class CustomRadioGroupComponent implements ControlValueAccessor { value: any; onChange: (value: any) => void = () => {}; onTouched: () => void = () => {}; writeValue(value: any): void { this.value = value; } registerOnChange(fn: (value: any) => void): void { this.onChange = fn; } registerOnTouched(fn: () => void): void { this.onTouched = fn; } } 确保您的自定义表单控件正确实现 ControlValueAccessor 接口并提供 NG_VALUE_ACCESSOR。 检查您的测试配置: 例如: TestBed.configureTestingModule({ declarations: [CustomRadioGroupComponent, YourComponent], // Include your custom form control and your component imports: [ReactiveFormsModule, MatRadioModule], }).compileComponents(); 检查测试 HTML: 在您的测试 HTML 模板中,确保您正确使用自定义表单控件: <app-custom-radio-group formControlName="gender"> <mat-radio-button value="Male">Male</mat-radio-button> <mat-radio-button value="Female">Female</mat-radio-button> </app-custom-radio-group> 请验证这些方面,如果问题仍然存在,请提供有关自定义表单控件实现和测试设置的更多详细信息,以便我可以帮助您。