标签: angular2-forms

无法绑定到'formGroup',因为它不是'form'的已知属性

情况:

请帮忙!我试图在我的Angular2应用程序中制作一个非常简单的表单,但无论它从不工作.

角度版本:

Angular 2.0.0 Rc5

错误:

Can't bind to 'formGroup' since it isn't a known property of 'form'
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

代码:

风景:

<form [formGroup]="newTaskForm" (submit)="createNewTask()">

    <div class="form-group">
        <label for="name">Name</label>
        <input type="text" name="name" required>
    </div>

     <button type="submit" class="btn btn-default">Submit</button>

</form>
Run Code Online (Sandbox Code Playgroud)

控制器:

import { Component } from '@angular/core';
import { FormGroup, FormControl, Validators, FormBuilder }  from '@angular/forms';
import {FormsModule,ReactiveFormsModule} from '@angular/forms';
import { Task } from './task';

@Component({
    selector: 'task-add',
    templateUrl: 'app/task-add.component.html'

})


export class TaskAddComponent {

    newTaskForm: FormGroup;

    constructor(fb: FormBuilder) 
    {
        this.newTaskForm …
Run Code Online (Sandbox Code Playgroud)

typescript angular2-forms angular

671
推荐指数
29
解决办法
49万
查看次数

tslint/codelyzer/ng lint错误:"for(... in ...)语句必须使用if语句进行过滤"

Lint错误消息:

src/app/detail/edit/edit.component.ts [111,5]:for(... in ...)语句必须用if语句过滤

代码片段(这是一个工作代码.它也可以在angular.io表单验证部分获得):

for (const field in this.formErrors) {
      // clear previous error message (if any)
      this.formErrors[field] = '';
      const control = form.get(field);

      if (control && control.dirty && !control.valid) {
        const messages = this.validationMessages[field];
        for (const key in control.errors) {
          this.formErrors[field] += messages[key] + ' ';
        }
      }
    }
Run Code Online (Sandbox Code Playgroud)

知道如何修复这个lint错误吗?

tslint angular2-forms angular-cli angular

201
推荐指数
5
解决办法
10万
查看次数

"exportAs"设置为"ngForm"没有指令

拥有此项目依赖项:

  "dependencies": {
    "@angular/common": "2.0.0-rc.6",
    "@angular/compiler": "2.0.0-rc.6",
    "@angular/core": "2.0.0-rc.6",
    "@angular/forms": "2.0.0-rc.6",
    "@angular/http": "2.0.0-rc.6",
    "@angular/platform-browser": "2.0.0-rc.6",
    "@angular/platform-browser-dynamic": "2.0.0-rc.6",
    "@angular/router": "3.0.0-rc.2",
    "ng2-bootstrap": "^1.1.1",
    "reflect-metadata": "^0.1.8",
    "core-js": "^2.4.0",
    "es6-module-loader": "^0.17.8",
    "rxjs": "5.0.0-beta.11",
    "systemjs": "0.19.27",
    "zone.js": "0.6.17",
    "jquery": "3.0.0",
  }
Run Code Online (Sandbox Code Playgroud)

这个登录模板:

<form #loginForm="ngForm" (ng-submit)="authenticate(loginForm.value)">
</form>
Run Code Online (Sandbox Code Playgroud)

而这个登录组件:

import { Component } from '@angular/core';
import {Http, Headers}  from '@angular/http';
@Component({
    moduleId: module.id,
    selector: 'login-cmp',
    templateUrl: 'login.component.html'
})
export class LoginComponent {
  constructor($http: Http) {
    this.$http = $http;
  }
  authenticate(data) {
   ... 
  }
}
Run Code Online (Sandbox Code Playgroud)

我有这个错误:

zone.js?1474211973422:484 Unhandled …
Run Code Online (Sandbox Code Playgroud)

angular2-forms angular

193
推荐指数
11
解决办法
15万
查看次数

Angular 2:无法绑定到'ngModel',因为它不是'input'的已知属性

我正在尝试在Angular 2中实现Dynamic Forms.我在动态表单中添加了删除和取消等附加功能.我已按照此文档:https://angular.io/docs/ts/latest/cookbook/dynamic-form.html

在此输入图像描述

我对代码做了一些更改.我在这里得到错误.

我该怎么做这个错误?

你可以找到完整的代码在这里:http://plnkr.co/edit/SL949g1hQQrnRUr1XXqt?p=preview,这是在plunker但不是在我的本地系统的工作.

Html代码:

<div>
  <form [formGroup]="form">

    <div *ngFor="let question of questions" class="form-row">
      <label [attr.for]="question.key">{{question.label}}</label>

  <div [ngSwitch]="question.controlType">

    <input *ngSwitchCase="'textbox'" [formControlName]="question.key"
            [id]="question.key" [type]="question.type" [(ngModel)]="question.value">

    <select [id]="question.key" [(ngModel)]="question.value" *ngSwitchCase="'dropdown'" [formControlName]="question.key" >
      <option *ngFor="let opt of question.options" [ngValue]="opt.key" >{{opt.value}}</option>
    </select>

    <input *ngSwitchCase="'checkbox'"  [(ngModel)]="question.value"
            [id]="question.key" [type]="question.type" (change)="question.value = ck.checked" #ck [ngModelOptions]="{standalone: true}">

  </div> 
  <div class="errorMessage" *ngIf="!form.controls[question.key].valid">{{question.label}} is required</div>
    </div>

    <div class="form-row">
      <button type="submit" [disabled]="!form.valid" (click)="onSubmit()">Save</button>
      <button type="button" class="btn btn-default" (click)="cancel()">Cancel</button>
      <button type="button" class="btn btn-default" (click)="clear()">Clear</button>

    </div> …
Run Code Online (Sandbox Code Playgroud)

forms angular2-forms angular2-template angular

172
推荐指数
5
解决办法
19万
查看次数

如何手动将Angular表单字段设置为无效?

我正在处理登录表单,如果用户输入无效凭据,我们要将电子邮件和密码字段都标记为无效,并显示一条消息,指出登录失败.如何从可观察的回调中将这些字段设置为无效?

模板:

<form #loginForm="ngForm" (ngSubmit)="login(loginForm)" id="loginForm">
  <div class="login-content" fxLayout="column" fxLayoutAlign="start stretch">
    <md-input-container>
      <input mdInput placeholder="Email" type="email" name="email" required [(ngModel)]="email">
    </md-input-container>
    <md-input-container>
      <input mdInput placeholder="Password" type="password" name="password" required [(ngModel)]="password">
    </md-input-container>
    <p class='error' *ngIf='loginFailed'>The email address or password is invalid.</p>
    <div class="extra-options" fxLayout="row" fxLayoutAlign="space-between center">
     <md-checkbox class="remember-me">Remember Me</md-checkbox>
      <a class="forgot-password" routerLink='/forgot-password'>Forgot Password?</a>
    </div>
    <button class="login-button" md-raised-button [disabled]="!loginForm.valid">SIGN IN</button>
     <p class="note">Don't have an account?<br/> <a [routerLink]="['/register']">Click here to create one</a></p>
   </div>
 </form>
Run Code Online (Sandbox Code Playgroud)

登录方式:

 @ViewChild('loginForm') loginForm: HTMLFormElement;

 private login(formData: any): void {
    this.authService.login(formData).subscribe(res => …
Run Code Online (Sandbox Code Playgroud)

validation angular2-forms angular

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

模板驱动和反应形式之间有什么实际区别?

我一直在阅读Angular2新的Forms API,似乎表单上有两种方法,一种是模板驱动形式,另一种是反应式或模型驱动型.

我想知道两者之间的实际差异,不是语法上的差异(显然),而是实际用途,哪种方法在不同情况下有更多好处.另外,选择其中一个是否有性能提升?如果是,为什么?

angular2-forms angular

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

Angular2禁用按钮

我知道在angular2中我可以禁用具有该[disable]属性的按钮 ,例如:

<button [disabled]="!isValid" (click)="onConfirm()">Confirm</button>
Run Code Online (Sandbox Code Playgroud)

但我可以做到这一点使用[ngClass][ngStyle]?像这样:

<button [ngStyle]="{disabled : !isValid}" (click)="onConfirm()">Confirm</button>
Run Code Online (Sandbox Code Playgroud)

谢谢.

html angular2-forms angular2-template angular

106
推荐指数
5
解决办法
19万
查看次数

Angular2错误:没有将"exportAs"设置为"ngForm"的指令

我在RC4上,我收到错误由于我的模板,没有指令"exportAs"设置为"ngForm":

<div class="form-group">
        <label for="actionType">Action Type</label>
        <select
            ngControl="actionType" 
      ===>  #actionType="ngForm" 
            id="actionType" 
            class="form-control" 
            required>
            <option value=""></option>
            <option *ngFor="let actionType of actionTypes" value="{{ actionType.label }}">
                {{ actionType.label }}
            </option>
        </select> 
    </div>
Run Code Online (Sandbox Code Playgroud)

boot.ts:

import {disableDeprecatedForms, provideForms} from '@angular/forms'; 

 import {bootstrap} from '@angular/platform-browser-dynamic';
 import {HTTP_PROVIDERS, Http} from '@angular/http';
 import {provideRouter} from '@angular/router';

import {APP_ROUTER_PROVIDER} from './routes';

import {AppComponent} from './app.component';

bootstrap(AppComponent, [ disableDeprecatedForms(), provideForms(), APP_ROUTER_PROVIDER, HTTP_PROVIDERS]);
Run Code Online (Sandbox Code Playgroud)

///所以这是我的DropdownList:

<fieldset ngControlGroup="linkedProcess" >
                     <div ngControlGroup="Process" >
                         <label>Linked Process</label>
                          <div class="form-group">       
        <select 
            ngModel
            name="label" 
            #label="ngModel" 
            id="label" …
Run Code Online (Sandbox Code Playgroud)

typescript angular2-forms angular

102
推荐指数
5
解决办法
12万
查看次数

管道''找不到angular2定制管道

我似乎无法修复此错误.我有一个搜索栏和一个ngFor.我试图使用这样的自定义管道过滤数组:

import { Pipe, PipeTransform } from '@angular/core';

import { User } from '../user/user';

@Pipe({
  name: 'usersPipe',
  pure: false
})
export class UsersPipe implements PipeTransform {
  transform(users: User [], searchTerm: string) {
    return users.filter(user => user.name.indexOf(searchTerm) !== -1);
  }
}
Run Code Online (Sandbox Code Playgroud)

用法:

<input [(ngModel)]="searchTerm" type="text" placeholder="Search users">

<div *ngFor="let user of (users | usersPipe:searchTerm)">
...
</div>
Run Code Online (Sandbox Code Playgroud)

错误:

zone.js:478 Unhandled Promise rejection: Template parse errors:
The pipe 'usersPipe' could not be found ("
<div class="row">
    <div  
    [ERROR ->]*ngFor="let user of (user | …
Run Code Online (Sandbox Code Playgroud)

angular2-forms angular2-pipe angular

97
推荐指数
5
解决办法
12万
查看次数

Angular 2禁用控件不包含在form.value中

我注意到如果我禁用Angular 2反应形式的控件,那么控件不会包含在form.value中.例如,如果我定义我的表单如下:

this.notelinkingForm = new FormGroup({
    Enabled: new FormControl(settings.Enabled, Validators.required),
    LinkToPreceeding: new FormControl({value: settings.LinkToPreceeding, disabled: !settings.Enabled}, Validators.required),
    LinkingTolerance: new FormControl({value: settings.LinkingTolerance, disabled: !settings.Enabled}, Validators.required)
});
Run Code Online (Sandbox Code Playgroud)

并检查this.notelinkingForm.value,如果启用了所有控件,则输出将为:

{"Enabled":true, "LinkToPreceeding": true, LinkingTolerance:"100"} 
Run Code Online (Sandbox Code Playgroud)

但是,当某些控件被禁用时,它将是:

{"Enabled":true} 
Run Code Online (Sandbox Code Playgroud)

请注意如何排除禁用的控件.

我的意图是,当表单更改时,我希望能够将form.value与其中的所有属性一起传递给我的rest API.如果它不包含禁用的项目,这显然是不可能的.

我在这里遗漏了什么或这是预期的行为吗?有没有办法告诉Angular在form.value中包含禁用的项目?

欢迎你的想法.

angular2-forms angular

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