Je suis sur le RC4 et j'obtiens l'erreur Il n'y a pas de directive avec "exportAs" réglé sur "ngForm" à cause de mon modèle:
<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>
le 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]);
/// voici donc ma liste déroulante:
<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>
// mon composant ts:
je le représentais dans les anciennes formes comme ceci:
categoryControlGroups:ControlGroup[] = [];
categories:ControlArray = new ControlArray(this.categoryControlGroups);
et maintenant je fais ceci:
categoryControlGroups:FormGroup[] = [];
categories:FormArray = new FormArray(this.categoryControlGroups);
vous pensez que c'est la cause du problème ??
Réponses:
Depuis 2.0.0.rc6 :
En bref:
FormsModule
à votre fichier@NgModule
.ReactiveFormsModule
à votre fichier@NgModule
.Alors, ajoutez à votre
app.module.ts
ou équivalent:Ne pas avoir l'un de ces modules peut entraîner des erreurs, y compris celle que vous rencontrez:
En cas de doute, vous pouvez fournir à la fois le
FormsModule
et leReactiveFormsModule
ensemble, mais ils sont entièrement fonctionnels séparément. Lorsque vous fournissez l'un de ces modules, les directives de formulaires par défaut et les fournisseurs de ce module seront disponibles à l'échelle de l'application.Anciens formulaires utilisant
ngControl
?Si vous disposez de ces modules
@NgModule
, vous utilisez peut-être d'anciennes directives, commengControl
, ce qui pose problème, car il n'yngControl
en a pas dans les nouveaux formulaires. Il a été remplacé plus ou moins * parngModel
.Par exemple, l'équivalent de
<input ngControl="actionType">
est<input ngModel name="actionType">
, alors changez cela dans votre modèle.De même, l'exportation dans les champs n'est
ngForm
plus, elle l'est maintenantngModel
. Donc, dans votre cas, remplacez#actionType="ngForm"
par#actionType="ngModel"
.Ainsi, le modèle résultant doit être (
===>
s où changé):* Plus ou moins car toutes les fonctionnalités de n'ont pas
ngControl
été déplacées versngModel
. Certains ont simplement été supprimés ou sont différents maintenant. Un exemple est l'name
attribut, le cas même que vous rencontrez actuellement.la source
<input>
intérieur*ngFor
? (Ne fonctionnera probablement pas , mais essayer cela et me dire si le message disparaît:<option *ngFor="let actionType of actionTypes; let i = index" value="{{ actionTypes[i].label }}"> {{ actionTypes[i].label }} </option>
)*ngFor
?*ngFor
en quelque chose d'autre queactionType
, ça va ?J'ai fait face au même problème. J'avais manqué la balise d'importation du module de formulaires dans l'app.module.ts
la source
J'ai eu le même problème qui a été résolu en ajoutant le FormsModule au .spec.ts:
puis en ajoutant l'importation à beforeEach:
la source
Si vous obtenez plutôt ceci:
Ce qui a été signalé comme un bogue dans github , alors ce n'est probablement pas un bogue puisque vous pourriez:
[(ngModel)]]=
, OUformControlName
, avec langModel
directive . Ceci "a été obsolète dans Angular v6 et sera supprimé dans Angular v7" , car cela mélange les deux stratégies de formulaire, ce qui en fait:Lorsque vous avez une entrée comme celle-ci:
Il affichera un avertissement sur les stratégies de formulaire mixte dans la console du navigateur:
Cependant, si vous ajoutez le
ngModel
comme valeur dans une variable de référence, par exemple:L'erreur ci-dessus est alors déclenchée et aucun avertissement concernant le mélange de stratégies n'est affiché.
la source
Dans mon cas, j'ai dû ajouter
FormsModule
etReactiveFormsModule
à lashared.module.ts
trop:(merci à @Undrium pour l' exemple de code ):
la source
J'ai eu ce problème et j'ai réalisé que je n'avais pas lié mon composant à une variable.
Modifié
<input #myComponent="ngModel" />
à
<input #myComponent="ngModel" [(ngModel)]="myvar" />
la source
La bonne façon d'utiliser les formulaires maintenant dans Angular2 est:
L'ancienne méthode ne fonctionne plus
la source
Nous avons également réalisé que ce problème se posait lorsque l'on essayait de combiner des approches de formulaire réactif et de formulaire modèle. J'avais
#name="ngModel"
et[formControl]="name"
sur le même élément. La suppression de l'un ou l'autre a résolu le problème. De plus, si vous utilisez,#name=ngModel
vous devriez également avoir une propriété comme celle-ci[(ngModel)]="name"
, sinon, vous obtiendrez toujours les erreurs. Cela s'applique également aux angles 6, 7 et 8.la source
Vérifiez que vous avez les deux
ngModel and name
attributs dans votre sélection. Select est également un composant de formulaire et non le formulaire entier, donc une déclaration plus logique de référence locale sera: -Une autre chose importante est de vous assurer que vous importez soit
FormsModule
dans le cas d'une approche basée sur un modèle, soitReactiveFormsModule
dans le cas d'une approche réactive. Ou vous pouvez importer les deux, ce qui est également très bien.la source
si
ngModule
ne fonctionne pas en entrée signifie essayer ... supprimer les guillemetsngModule
comme
au lieu d'en haut
la source
J'ai eu ce problème parce que j'avais une faute de frappe dans mon modèle près de [(ngModel)]]. Support supplémentaire. Exemple:
la source