标签: angular2-forms

在RC6中升级到@ angular/forms

我一直在推迟从已弃用的表单api到@ angular/forms中的新表单api的升级.我刚刚升级到RC6,现在也想开始使用@ angular/forms.

此时文档非常稀缺,而且我很快陷入困境.

这就是我的工作表格:

<form [ngFormModel]="registrationForm" (ngSubmit)="register(registrationForm.value)">
    <fieldset class="form-group">
        <label for="email">Email address</label>
        <input type="email" class="form-control" id="email" placeholder="email" [ngFormControl]="registrationForm.controls['email']" maxlength="128" required>
    </fieldset>
    <div class="alert alert-warning" role="alert" *ngIf="registrationResponse && registrationResponse.EmailExists">
      This email account is already linked to an account! <a [routerLink]="['/user/logon']">Go here to login</a>.
    </div>
    <fieldset class="form-group">
        <label for="username">User name</label>
        <input type="text" class="form-control" id="username" placeholder="user name" [ngFormControl]="registrationForm.controls['username']" maxlength="32" required>
    </fieldset>
    <div class="alert alert-warning" role="alert" *ngIf="registrationResponse && registrationResponse.UsernameExists">
      This username is already taken! Please choose another one.
    </div>
    <div>
        <button type="submit" class="btn …
Run Code Online (Sandbox Code Playgroud)

javascript forms angular2-forms angular

2
推荐指数
1
解决办法
2594
查看次数

Angular2(ngSubmit)不起作用

我刚刚启动Angular2并在向表单添加(ngSubmit)属性时面临以下错误

Template parse errors:
There is no directive with "exportAs" set to "ngForm" ("


    <form [ERROR ->]#form="ngForm" (ngSubmit)="onSubmit()" novalidate>
Run Code Online (Sandbox Code Playgroud)

以下是我在package.json中的一些依赖项.

"dependencies": {
    "@angular/common": "2.0.0",
    "@angular/compiler": "2.0.0",
    "@angular/core": "2.0.0",
    "@angular/forms": "2.0.0",
    "@angular/http": "2.0.0",
    "@angular/platform-browser": "2.0.0",
    "@angular/platform-browser-dynamic": "2.0.0",
    "@angular/router": "3.0.0",
    "@angular/upgrade": "2.0.0",
    "angular2-in-memory-web-api": "0.0.20",
    "core-js": "^2.4.1",
    "ie-shim": "^0.1.0",
    "jquery": "^3.1.0",
    "reflect-metadata": "^0.1.3",
    "rxjs": "5.0.0-beta.12",
    "systemjs": "0.19.27",
    "zone.js": "^0.6.23"
  }
Run Code Online (Sandbox Code Playgroud)

我跟随html表格.

<form #form="ngForm" (ngSubmit)="onSubmit()" novalidate>

    <div class="form-group">
        <label>Title</label>
        <input [(ngModel)]="model.Title" #title="ngModel" name="title" id="title" type="text" class="form-control" value="">
    </div>

    <div class="form-group">
        <label>Description</label>
        <textarea …
Run Code Online (Sandbox Code Playgroud)

angular2-forms angular2-directives angular

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

离子2 - 设定模型驱动形式的值

当我加载这个时,我想要将以前保存的值从本地存储器归因于此表单时,我会遇到与Ionic 2中内置的模型驱动表单相关的内容.

我设法使用Ionic的存储服务保存它,但是我没有将这些保存的数据归因于表单.我收到以下错误:

TypeError:设置只有getter的属性

这是我的代码,到目前为止:

import { Component } from '@angular/core';
import { Validators, FormBuilder, FormGroup } from '@angular/forms';
import { NavController, NavParams } from 'ionic-angular';
import { Storage } from '@ionic/storage';

@Component({
  selector: 'page-survey',
  templateUrl: 'survey.html',
  providers: [Storage]
})

export class Survey {
  form: FormGroup;
  networkStatus: boolean = true;

  constructor(public navCtrl: NavController, public navParams: NavParams,
              public formBuilder: FormBuilder, private storage: Storage) {

    // localstorage 
    this.storage = storage;

    this.form = formBuilder.group({
      "isPropertyOwner": ["", Validators.required],
      "familyMembers": ["", Validators.compose([Validators.required, Validators.minLength(0)])],
      "ownsProperty": ["", …
Run Code Online (Sandbox Code Playgroud)

local-storage ionic2 angular2-forms angular

2
推荐指数
1
解决办法
3601
查看次数

表单内的多个子组件 - Angular 2

我正在处理大型表单,因此我计划将表单截断为多个子组件,这有助于轻松集成和维护.使用表单生成器我试图实现这一点.

mainform.html

    <form novalidate (ngSubmit)="onSubmit(formDetail);" [formGroup]="formDetail">
      <label>
        <span>Name</span>
          <input
          type="text"
          placeholder="Enter emp name"
          formControlName="name">
      </label>
      <app-userinfo></app-userinfo> <!-- Child component 1 -->
      <app-useracc></app-useracc> <!-- Child component 2 -->
    </form>
Run Code Online (Sandbox Code Playgroud)

mainform.ts

export class MainformComponent implements OnInit {
  formDetail: FormGroup;
  constructor(private formBuilder: FormBuilder) { }

  ngOnInit() {
      this.formDetail= this.formBuilder.group({
        name:'',
      userinfo: this.formBuilder.group({
        userid: '',
        userph: ''
      }),
      useracc: this.formBuilder.group({
        useracc: '',
        usertransfer: ''
      })
    });
  }
  onSubmit(value:User){
    debugger;
  }
}
Run Code Online (Sandbox Code Playgroud)

CONSOLE.LOG

formControlName must be used with a parent formGroup directive.  You'll want to …
Run Code Online (Sandbox Code Playgroud)

angular2-forms angular2-directives angular

2
推荐指数
1
解决办法
6942
查看次数

Angular 2:文件扩展名的自定义验证

我是新手。我想创建一个自定义验证来检查文件大小和扩展名。我正在使用FormBuilder进行验证,并使用FileReader API来获取输入元素字段数据的文件名和大小。

问题:我们能够在变更事件上触发自定义验证,但无法获取输入类型字段的值。

请提出建议,我们如何实现角度2中文件扩展名和大小的自定义验证。

HTML:

<input type="file" [formControl] = "formName.controls['thumbnailImg']" (change)="changeThumbFile($event)">
Run Code Online (Sandbox Code Playgroud)

零件:

//custom validation
function validateExt(c: FormControl) {
    let extension = ['png', 'jpeg', 'gif'];
    return extension.indexOf(c.value)? null : { validateExt: { valid: false } }
}

this.form = this.formBuilder.group({
  'thumbnailImg': ['', validateExt],
});
changeThumbFile($event){
    var file: File = $event.target.files[0];
    var fReader: FileReader = new FileReader();

    var imgName = file.name;
    this.thumbnailName = imgName;

    this.formGp.controls['thumbnailImg'].updateValueAndValidity();
}
Run Code Online (Sandbox Code Playgroud)

angular2-forms angular2-directives angular

2
推荐指数
1
解决办法
7359
查看次数

Angular 2表单reset()不重置_submitted或submit的值

有没有办法让form.reset()也重新将值form.submitted重置为false?这在我的情况下很烦人,因为我使用form.submitted作为条件来显示模板中的验证错误.这意味着在清除(重置)表单后会显示验证错误.

模板:

<form ... #f="ngForm" (ngSubmit)="f.form.valid && submitProduct(f)>
  <input type="text" name="productName" [(ngModel)]="product.name" #productName="ngModel" required>
  <div *ngIf="f.submitted && !productName.valid">Product name is required</div>
  <button type="submit" value="true" >Submit Request</button>
</form>
Run Code Online (Sandbox Code Playgroud)

零件:

submitProduct(form: NgForm) {
    this.productService.createProduct(this.product).subscribe(data => {
        form.reset();
        // HERE annoyingly validation errors show up on empty form.
      }
    );
}
Run Code Online (Sandbox Code Playgroud)

angular2-forms angular

2
推荐指数
1
解决办法
4080
查看次数

如何在angular2的表单数组中显示嵌套数组数据?

我已经FormGroup在angular2项目中实现了渲染形式,并且我已经使用formArray了嵌套数组数据

form.component.html

<div class="col-md-12" formArrayName="social_profiles">
  <div *ngFor="let social of resumeForm.controls.social_profiles.controls; let i=index" class="panel panel-default m-t-10">
    <div class="panel-heading" style="min-height: 30px;">
      <span class="glyphicon glyphicon-remove pull-right" *ngIf="resumeForm.controls.social_profiles.controls.length > 1" (click)="removeSocialProfiles(i)"></span>
    </div>
    <div class="panel-body" [formGroupName]="i">
      <social-profile [group]="resumeForm.controls.social_profiles.controls[i]"></social-profile>
    </div>
  </div>
</div>
Run Code Online (Sandbox Code Playgroud)

form.component.ts

export class FormComponent implements OnInit {
    public resumeForm: FormGroup;

    constructor(private formBuilder: FormBuilder) {}

    ngOnInit() {
        this.resumeForm = this.formBuilder.group({
            name: ['', Validators.required],
            label: ['',],
            email: [''],
            phone: [''],  
            social_profiles: this.formBuilder.array([])
        });

        this.addSocialProfiles();
    }

    initSocialProfiles() {
        return this.formBuilder.group({
            network: [''],
            url: …
Run Code Online (Sandbox Code Playgroud)

json angular2-forms angular

2
推荐指数
1
解决办法
3003
查看次数

如何显示动态表单数组的md-error消息?

我有一个动态表单数组,如果我点击添加联系人按钮,它将添加动态表单字段后,我试图验证表单字段(validator.required,validator.pattern等...)和它的工作正常.

当我试图在html视图中显示以下错误消息时

<md-error *ngIf="myForm.controls.myContactArray.controls['name'].hasError('required')">
      Email is <strong>required</strong>
    </md-error>
Run Code Online (Sandbox Code Playgroud)

得到以下错误消息

core.es5.js:1020 ERROR TypeError: Cannot read property 'hasError' of undefined
    at Object.eval [as updateDirectives] (RegisterComponent.ngfactory.js:453)
    at Object.updateDirectives (core.es5.js:12770)
    at checkAndUpdateView (core.es5.js:12288)
    at callViewAction (core.es5.js:12651)
    at execEmbeddedViewsAction (core.es5.js:12609)
    at checkAndUpdateView (core.es5.js:12289)
    at callViewAction (core.es5.js:12651)
    at execComponentViewsAction (core.es5.js:12583)
    at checkAndUpdateView (core.es5.js:12294)
    at callViewAction (core.es5.js:12651)
Run Code Online (Sandbox Code Playgroud)

HTML

<div class="container-fluid">
  <md-card>
    <button (click)="addColumn()" md-raised-button>Add Contacts</button>
    <hr>
      <form  [formGroup] = "myForm" (ngSubmit) = "save(myForm.value)" class="contact-form">
        <div formArrayName="myContactArray">
          <div *ngFor="let myGroup of myForm.controls.myContactArray.controls; let rowIndex = index" >
            <div …
Run Code Online (Sandbox Code Playgroud)

typescript angular2-forms angular

2
推荐指数
1
解决办法
3220
查看次数

Angular4从脏支票中排除属性

我已经通过模板驱动的表单实现了一个自定义表单控件,该表单控件将输入包装为html并添加了标签等。它与ngModel上的2way数据绑定可以很好地与表单进行对话。问题是,表单在初始化时会自动标记为脏的。有没有一种方法可以防止这种情况发生,因此我可以在表单上使用这些属性,它们将是准确的?

自定义选择器(除了自动标记为脏以外,此方法还可以正常工作):

<form class="custom-wrapper" #searchForm="ngForm">
            {{searchForm.dirty}}
            {{test}}
            <custom-input name="testing" id="test" label="Hello" [(ngModel)]="test"></custom-input>
            <pre>{{ searchForm.value | json }}</pre>
</form>
Run Code Online (Sandbox Code Playgroud)

自定义输入模板:

<div class="custom-wrapper col-xs-12">
    <div class="row input-row">
        <div class="col-xs-3 col-md-4 no-padding" *ngIf="!NoLabel">
            <label [innerText]="label" class="inputLabel"></label>
        </div>
        <div class="col-xs-9 col-md-8 no-padding">
            <input pInput name="cust-input" [(ngModel)]="value"  />
        </div>
    </div>
</div>
Run Code Online (Sandbox Code Playgroud)

自定义输入组件:

import { ControlValueAccessor, NG_VALUE_ACCESSOR } from "@angular/forms";
import { Component, Input, forwardRef } from "@angular/core";

@Component({
    selector: "custom-input",
    template: require("./custom-input.component.html"),
    providers: [
        {
            provide: NG_VALUE_ACCESSOR,
            useExisting: forwardRef(() => QdxInputComponent),
            multi: true
        }
    ] …
Run Code Online (Sandbox Code Playgroud)

angular2-forms angular angular4-forms

2
推荐指数
1
解决办法
1889
查看次数

每当悬停时,如何在按钮顶部显示工具提示?

我想在Angular2中悬停按钮时在顶部显示工具提示.

我们需要为此编写指令吗?

我不想为此使用Material UI.

寻找可重复使用的东西

angular2-forms angular2-directives angular

2
推荐指数
1
解决办法
4001
查看次数