Я использую 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>
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]);
/// вот мой DropdownList:
<fieldset ngControlGroup="linkedProcess" >
<div ngControlGroup="Process" >
<label>Linked Process</label>
<div class="form-group">
<select
ngModel
name="label"
#label="ngModel"
id="label"
class="form-control" required
(change)="reloadProcesse(list.value)"
#list>
<option value=""></option>
<!--<option value=`{{ActionFormComponent.getFromString('GET'')}}`></option>-->
<option *ngFor="let processus of linkedProcess?.processList?.list; let i = index"
value="{{ processus[i].Process.label}}">
{{processus.Process.label}}
</option>
</select>
</div>
</div>
// мой компонент ts:
Я представлял это в старых формах вот так:
categoryControlGroups:ControlGroup[] = [];
categories:ControlArray = new ControlArray(this.categoryControlGroups);
и теперь я делаю это:
categoryControlGroups:FormGroup[] = [];
categories:FormArray = new FormArray(this.categoryControlGroups);
вы думаете, это причина проблемы ??
Ответы:
Начиная с 2.0.0.rc6 :
Коротко:
FormsModule
в свой@NgModule
.ReactiveFormsModule
в свой@NgModule
.Итак, добавьте к своему
app.module.ts
или аналогичному:Отсутствие одного из этих модулей может привести к ошибкам, в том числе к той, с которой вы столкнулись:
Если вы сомневаетесь, вы можете обеспечить как
FormsModule
и вReactiveFormsModule
тусовке, но они полностью функциональные отдельно. Когда вы предоставляете один из этих модулей, директивы форм по умолчанию и поставщики из этого модуля будут доступны для всего приложения.Используете старые формы
ngControl
?Если у вас есть эти модули
@NgModule
, возможно, вы используете старые директивы, такие какngControl
, что является проблемой, потому чтоngControl
в новых формах их нет. Его более или менее заменили * наngModel
.Например, эквивалент
<input ngControl="actionType">
есть<input ngModel name="actionType">
, поэтому измените его в своем шаблоне.Точно так же экспорта в контроле
ngForm
больше нет, это сейчасngModel
. Итак, в вашем случае замените#actionType="ngForm"
на#actionType="ngModel"
.Итак, итоговый шаблон должен быть (
===>
где были изменены):* Более или менее потому, что не вся функциональность
ngControl
была перенесена вngModel
. Некоторые просто удалили или сейчас другие. Примером может служитьname
атрибут, тот самый случай, который у вас сейчас есть.источник
<input>
внутри*ngFor
? (Вероятно , не будет работать , но попробуйте это и скажите мне , если сообщение уходит:<option *ngFor="let actionType of actionTypes; let i = index" value="{{ actionTypes[i].label }}"> {{ actionTypes[i].label }} </option>
)*ngFor
?*ngFor
что-то другое, а не вactionType
любое хорошее?Я столкнулся с той же проблемой. Я пропустил тег импорта модуля форм в app.module.ts
источник
У меня была такая же проблема, которая была решена путем добавления FormsModule в .spec.ts:
а затем добавляем импорт в beforeEach:
источник
Если вместо этого вы получаете это:
Что было сообщено как ошибка в github , то, вероятно, это не ошибка, поскольку вы могли:
[(ngModel)]]=
, ИЛИformControlName
, сngModel
директивой . Это "устарело в Angular v6 и будет удалено в Angular v7" , так как это смешивает обе стратегии формы, делая это:Когда у вас есть такой ввод:
Он покажет предупреждение о стратегиях смешанной формы в консоли браузера:
Однако, если вы добавите
ngModel
как значение в ссылочную переменную, например:Затем появляется указанная выше ошибка, и предупреждения о смешивании стратегий не отображаются.
источник
В моем случае мне пришлось добавить
FormsModule
иReactiveFormsModule
кshared.module.ts
же:(спасибо @Undrium за пример кода ):
источник
У меня была эта проблема, и я понял, что не привязал свой компонент к переменной.
Изменено
<input #myComponent="ngModel" />
к
<input #myComponent="ngModel" [(ngModel)]="myvar" />
источник
Правильный способ использования форм теперь в Angular2:
Старый способ больше не работает
источник
Также осознал, что эта проблема возникает при попытке объединить подходы к реактивной форме и шаблонной форме. У меня
#name="ngModel"
и[formControl]="name"
на том же элементе. Удаление любого из них устранило проблему. Также не то, что, если вы используете, у#name=ngModel
вас также должно быть такое свойство, как это[(ngModel)]="name"
, иначе вы все равно получите ошибки. Это относится и к угловым 6, 7 и 8.источник
Убедитесь, что вы
ngModel and name
выбрали оба атрибута. Также Select является компонентом формы, а не всей формой, поэтому более логичным объявлением локальной ссылки будет: -Еще одна важная вещь - убедитесь, что вы выполняете импорт либо
FormsModule
в случае подхода на основе шаблонов, либоReactiveFormsModule
в случае реактивного подхода. Или вы можете импортировать оба, что тоже нормально.источник
если
ngModule
не работает во вводе, значит попробуйте ... удалите двойные кавычки вокругngModule
лайк
вместо выше
источник
У меня возникла эта проблема из-за опечатки в моем шаблоне рядом с [(ngModel)]]. Дополнительный кронштейн. Пример:
источник