标签: angular2-forms

TypeError:this.form._updateTreeValidity不是函数

我目前正在使用Angular Forms版本2.0.0,并尝试使用联系表单内部联系我们模式.

在ContactComponent加载后,我得到:

EXCEPTION:this.form._updateTreeValidity不是函数

不能罚款this.form._updateTreeValidity

  1. 我已经看到一些其他的堆栈帖子暗示使用FormGroup而不是FormBuilder来初始化组件构造函数中的表单对象现在是新API的标准,所以我已经更新了.

  2. 我导入ReactiveFormsModule和FormsModule以及所有与表单相关的组件,并且错误似乎与模块无关.

  3. 我的TypeScript不会在编译时抛出错误,Visual Studio Intellisense似乎能够很好地找到所有FormGroup函数,为什么会在运行时发生这种情况?...

我的代码:

contact.component.ts:

import { Component, Input, ViewChild } from '@angular/core';
import { ApiService } from '../../../services/api.service';
import { ModalComponent } from 'ng2-bs3-modal/ng2-bs3-modal';
import { Router, ActivatedRoute, Params } from '@angular/router';
import { FormsModule, ReactiveFormsModule, FormGroup, FormControl, Validators } from '@angular/forms';
import 'rxjs/Rx';

declare var jQuery: any;

@Component({
    selector: 'my-contact',
    templateUrl: 'app/modules/footer/contact/contact.html'
})
export class ContactComponent {

    private contactForm: FormGroup;
    private invalidEmail: boolean;
    private invalidSubject: boolean;
    private invalidMessage: boolean;

    constructor(private apiService: ApiService, …
Run Code Online (Sandbox Code Playgroud)

javascript validation typescript angular2-forms angular

18
推荐指数
2
解决办法
2万
查看次数

Angular2:更改要上载的文件时,不会触发<input type ="file"/>的验证

当文件输入发生变化时,Angular 2似乎在运行验证时遇到麻烦.

我做了一个插图来说明这个问题:

我创建了一个formGroup

this.frm = new FormGroup({
    file: new FormControl("", this.validateFile)
});
Run Code Online (Sandbox Code Playgroud)

在validateFile函数中,我抛出一个警报并记录到控制台:

public validateFile(formControl: FormControl): {[key: string]: any; } {
   alert('Validation ran');
   console.log('Validation ran');
}
Run Code Online (Sandbox Code Playgroud)

Plunkr来说明问题:https://plnkr.co/edit/Pgcg4IkejgaH5YgbY3Ar?p = preview

验证将在初始化页面时运行,但每次更改要上载的文件时都不会运行.

有没有解决这个问题的方法?

angular2-forms angular

18
推荐指数
2
解决办法
3万
查看次数

我为什么要使用Validators.compose()?

我有一个字段,我想用多个验证器验证.
使用Module Driven方法,代码看起来像这样:

this.exampleForm = this.fb.group({
    date_start : ['', Validators.compose([
                          Validators.required, 
                          Validators.pattern("[0-9]{2}-[0-9]{2}-[0-9]{4}")
                      ])
                 ]
})
Run Code Online (Sandbox Code Playgroud)

但是我也可以在没有Validators.compose()的情况下编写这个:

this.exampleForm = this.fb.group({
    date_start : ['', [
                          Validators.required, 
                          Validators.pattern("[0-9]{2}-[0-9]{2}-[0-9]{4}")
                      ]
                 ]
})
Run Code Online (Sandbox Code Playgroud)

它工作得很好.我个人比较喜欢第二个版本(无撰写),更少的代码和更好的可读性.这就引出了一个问题,我为什么要使用Validators.compose()?

angular2-forms angular2-formbuilder angular

18
推荐指数
2
解决办法
4821
查看次数

TypeError:无法在setUpControl的字符串'abc@gmail.com'上创建属性'validator'

我面临着问题formGroup.首先基于URL我采取一些价值并调用API来检索前场文本的特定用户数据.

register.html

<form [formGroup]="form" (ngSubmit)="onSubmit(form.value)" class="form-horizontal">
    <div class="form-group row">
        <label for="inputEmail3" class="col-sm-4 ">Username</label>
        <div class="col-sm-8">
            <input [formControl]="email" type="text" class="form-control" id="inputEmail3" placeholder="Email Address" [readonly]="isReadOnly">
        </div>
    </div>
</form>
Run Code Online (Sandbox Code Playgroud)

register.component.ts

import { Component } from '@angular/core';
import { FormGroup, AbstractControl, FormBuilder, Validators } from '@angular/forms';
import { Router, ActivatedRoute } from '@angular/router';
import { EmailValidator, EqualPasswordsValidator } from '../../theme/validators';

@Component({
  selector: 'register',
  templateUrl: './register.html',
})
export class Register {
  public form: FormGroup;
  public email: AbstractControl;
  public username: string;

  constructor(private registerService: RegisterService, …
Run Code Online (Sandbox Code Playgroud)

javascript angular2-forms angular2-template angular2-routing angular

18
推荐指数
3
解决办法
3万
查看次数

如何将输入值转换为角度2的大写(传递给ngControl的值)

我试图使用角度为2的ngControl值来验证输入字段.我需要验证用户始终以大写形式输入值.

现在我们需要将用户输入的值转换为大写.但是我使用ngControl处理输入字段中的值,而不是ngModel(考虑到我可以使用ngModelChange事件将值更新为大写.)

那么转换ngControl使用的值的最佳和低成本方法是什么?

html5 angular2-forms angular2-template angular

17
推荐指数
6
解决办法
5万
查看次数

如何在Angular 2中的NgModule中正确导入FormGroup

我尝试导入FromGroup,FormBuilder并对FormControlCustomModule:

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

@NgModule({
  imports: [
    FormsModule,
    FormGroup
  ]
})
Run Code Online (Sandbox Code Playgroud)

但它抛出一个错误:

EXCEPTION:未捕获(在承诺中):错误:模块'CustomModule'导入的意外值'FormGroup'

如果我只导入FormsModule它工作正常.

有任何想法吗?

import angular2-forms ng-modules angular

17
推荐指数
1
解决办法
3万
查看次数

如何观察Angular 2 NgForm上的触摸事件?

因此能够订阅回调到NgFormvalueChanges观察特性,以反应形式的控制的值的变化.

我需要以相同的方式对用户触摸其中一个表单控件的事件作出反应.

这个类似乎定义了valueChangesObservable,touched属性被定义为一个布尔值.

有没有办法对"控制感动"事件做出反应?

typescript angular2-forms angular

17
推荐指数
4
解决办法
1万
查看次数

获取FormGroup/FormControl中的验证程序

我在我的应用程序中使用了Material 2,但在这个问题中,我想用Input专门解决问题.

正如您在API Reference中看到的那样,有一个名为的属性绑定required,在占位符中显示为星号.

所以,我想知道是否有办法检查表单控件是否在Angular中有一个特定的验证器,因为我真的不想为每个输入手动设置[required]="true/false"

我阅读了AbstractControl文档,但我没有找到任何相关内容.我遇到的hasError 方法(这具有讽刺意味的是没有记录无处 ......无论是在FormGroup也不FormControl也不AbstractControl),但是这不是我要找的.它只是检查表单控件是否有错误,但正如您可能已阅读过,我想检查控件是否有一些特定的验证器...

一些代码:

<md-input-container>
  <input placeholder="Placeholder" 
         mdInput [formControl]="anyCtrl" 
         [required]="anyCtrl.hasValidator('required')"> <!-- something like this -->
</md-input-container>
Run Code Online (Sandbox Code Playgroud)

我希望这个问题足够清楚.提前致谢.

typescript angular2-forms angular-material2 angular

17
推荐指数
5
解决办法
1万
查看次数

以编程方式设置<mat-select>的值

我正在尝试设置2个字段值<input matInput>abnd <mat-select>编程.对于文本输入,一切都按预期工作,但是对于<mat-select>视图,这个字段就像它有价值一样null.但是,如果我打电话,console.log(productForm.controls['category'].value它会打印出我以编程方式设置的正确值.我错过了什么吗?

这是代码:

表单配置:

productForm = new FormGroup({
        name: new FormControl('', [
            Validators.required
        ]),
        category: new FormControl('', [
            Validators.required
        ]),
    });
Run Code Online (Sandbox Code Playgroud)

设定值:

ngOnInit() {
        this.productForm.controls['name'].setValue(this.product.name);
        this.productForm.controls['category'].setValue(this.product.category);
    }
}
Run Code Online (Sandbox Code Playgroud)

HTML:

<mat-form-field>
    <mat-select [formControlName]="'category'"
                [errorStateMatcher]="errorStateMatcher">
        <mat-option *ngFor="let category of categories" [value]="category">
            {{category.name}}
        </mat-option>
    </mat-select>
</mat-form-field>
Run Code Online (Sandbox Code Playgroud)

angular2-forms angular-material2 angular angular-reactive-forms angular5

17
推荐指数
3
解决办法
2万
查看次数

通过ngular 2中的ngModel选择列表获取对象属性?

我在获取从Angular 2(RC1)中的选择列表中选择的对象的属性时遇到问题.采用以下语法:

<select required [(ngModel)]="model.plan">
  <option selected="selected" disabled>Plan...</option>
  <option *ngFor="#plan of plans" [value]="plan">{{ plan.name }}</option>
</select>
Run Code Online (Sandbox Code Playgroud)

其中plans定义为对象数组:

[{ name: 'Plan 1' }, { name: 'Plan 2' }]
Run Code Online (Sandbox Code Playgroud)

如果您尝试输出所选对象的某个键的值,则不会显示任何内容:

<p>{{ model.plan?.name }}</p> // Shows nothing if a plan is selected
Run Code Online (Sandbox Code Playgroud)

这是Angular2表单现场演示的一个分支,显示了这个问题.从选择列表中选择"计划2",然后看到没有显示任何内容.

这里发生了什么?

angular2-forms angular

16
推荐指数
1
解决办法
3万
查看次数