2016-09-23 2 views
4

Я разрабатывал SPA в Angular2 RC1, однако с момента выхода финального релиза моя организация решила перенести код в Angular 2 GA. Хотя я мог исправить большинство сломанных вещей, я действительно борюсь с формами.
В моем предыдущем коде с RC1 я использовал ControlGroup и Control вместе с FormBuilder. Я использую их для выполнения обычных форм, таких как проверки, добавив & удаление элементов управления и т. Д. Однако теперь, видимо, они были удалены, и я понятия не имею, что их заменило.
Я пробовал несколько других классов из руководства API FormControl или FormGroup, но ни один из них не помог. Я хотел бы знать, что такое замена для двух классов.Какова альтернатива ControlGroup и Control в Angular2 GA/Final Release?

Edit: FormControl и FormGroup устранили ошибки в машинописном файле, однако, в разметке, я получаю inline template:0:0 caused by: No provider for FormBuilder! ошибку.

UPDATE: Я мог бы использовать FormGroup, FormControl и FormBuilder. Вышеприведенная ошибка была решена путем добавления ReactiveFormsModule в файл app.module.ts. Тем не менее, я получаю ошибку inline template:30:61 caused by: this.form._updateTreeValidity is not a function.
Это конкретная строка в шаблоне является
<form #userForm="ngForm" (ngSubmit)="submitUser()" [formGroup]="userForm" novalidate autocomplete="off">

Любые идеи?

ответ

5

обновлен до текущего углового (V4.0.1)

FormGroup или FormBuilder может быть использован вместо. FormBuilder - это просто короткий метод для FormGroup. Поэтому рекомендуется для более крупных/сложных форм.

Проблема с кодом, который вы указали выше, заключается в том, что вы объявляете как FormGroup, так и ngModel- #userForm="ngForm", которые, насколько мне известно, не могут использоваться вместе - not easily anyway ... Я тоже сделал эту ошибку.

private myForm: FormGroup; 

constructor(){ 
    this.myForm = new FormGroup({ 
     name: new FormGroup({ 
      first: new FormControl('Nancy', Validators.required), 
      last: new FormControl('Drew') 
     }), 
     email: new FormControl('') 
    }); 
} 

//The same thing using 'FormBuilder': (Note this would not change the template) 
constructor(@Inject(FormBuilder) fb: FormBuilder) { 
    this.myForm = fb.group({ 
     name: fb.group({ 
      first: ['Nancy', Validators.required], 
      last: 'Drew', 
     }), 
     email: '', 
    }); 
} 

И ваш шаблон так:

<form [formGroup]="myForm" novalidate autocomplete="off"> 
    <div formGroupName="name" novalidate autocomplete="off"> 
     <input type="text" formControlName="first"/> 
     <input type="text" formControlName="last"/> 
     <span [hidden]="myForm.controls['name'].valid">Error</span> 
    </div> 
    <input type="text" formControlName="email"/> 
</form> 

Альтернативой этому подходу является использование Angular's Template Driven Forms, это где вы будете использовать [(ngModel)]="someInput"

+0

И все же, используя именно эту модель, я get 'Не может связываться с 'FormControlName', поскольку это не известное свойство 'input''; Мне пришлось использовать '' formControlName "=" control-name "' (в Angular 2.0.2). Тем не менее, я получаю этот прекрасный конструктор с двойным стрельбой. – msanford

+0

Убедитесь, что вы используете правильный импорт FormModule. См. Вопрос, поднятый здесь: [Нельзя привязываться к 'formGroup', поскольку это не известное свойство 'form'] (http://stackoverflow.com/questions/39152071/cant-bind-to-formgroup-since -it-isnt-a-known-property-of-form) –

+0

На самом деле было один или два вопроса с кодом, но я обновил ответ с исправлениями. Благодарю. –

Смежные вопросы