Ich bin auf dem RC4 und erhalte den Fehler. Es gibt keine Direktive, bei der "exportAs" aufgrund meiner Vorlage auf "ngForm" gesetzt ist :
<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>
die 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]);
/// also hier ist meine 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>
// meine Komponente ts:
Ich habe es in den alten Formen so dargestellt:
categoryControlGroups:ControlGroup[] = [];
categories:ControlArray = new ControlArray(this.categoryControlGroups);
und jetzt mache ich das:
categoryControlGroups:FormGroup[] = [];
categories:FormArray = new FormArray(this.categoryControlGroups);
Sie denken, es ist die Ursache des Problems?
Antworten:
Seit 2.0.0.rc6 :
Zusamenfassend:
FormsModule
zu Ihrem hinzu@NgModule
.ReactiveFormsModule
Sie diese hinzu@NgModule
.Fügen Sie also zu Ihrem
app.module.ts
oder einem gleichwertigen hinzu:Wenn eines dieser Module nicht vorhanden ist, kann dies zu Fehlern führen, einschließlich des folgenden:
Wenn Sie Zweifel haben, können Sie sowohl das
FormsModule
als auch das angebenReactiveFormsModule
zusammen , aber sie sind separat voll funktionsfähig. Wenn Sie eines dieser Module bereitstellen, stehen Ihnen die Standardformularanweisungen und -anbieter dieses Moduls app-weit zur Verfügung.Alte Formen mit
ngControl
?Wenn Sie diese Module zur Verfügung haben
@NgModule
, verwenden Sie möglicherweise alte Anweisungen, z. B.ngControl
, was ein Problem darstellt, dangControl
die neuen Formulare keine enthalten . Es wurde mehr oder weniger ersetzt * durch ersetztngModel
.Zum Beispiel das Äquivalent zu
<input ngControl="actionType">
ist beispielsweise<input ngModel name="actionType">
: Ändern Sie dies in Ihrer Vorlage.Ebenso ist der Export in Steuerelemente nicht
ngForm
mehr, es ist jetztngModel
. Also, in Ihrem Fall, ersetzen Sie#actionType="ngForm"
mit#actionType="ngModel"
.Die resultierende Vorlage sollte also (
===>
s wo geändert) sein:* Mehr oder weniger, weil nicht alle Funktionen von
ngControl
verschoben wurdenngModel
. Einige wurden gerade entfernt oder sind jetzt anders. Ein Beispiel ist dasname
Attribut, genau der Fall, den Sie gerade haben.quelle
<input>
in einem*ngFor
? (Wahrscheinlich wird nicht funktionieren , sondern versuchen , diese und mir sagen , ob die Nachricht geht weg:<option *ngFor="let actionType of actionTypes; let i = index" value="{{ actionTypes[i].label }}"> {{ actionTypes[i].label }} </option>
)*ngFor
?*ngFor
in etwas anderes alsactionType
etwas Gutes umzubenennen?Ich stand vor dem gleichen Problem. Ich hatte das Import-Tag des Formularmoduls in der Datei app.module.ts verpasst
quelle
Ich hatte das gleiche Problem, das durch Hinzufügen des FormsModule zur .spec.ts behoben wurde:
und dann den Import zu beforeEach hinzufügen:
quelle
Wenn Sie dies stattdessen erhalten:
Was als Fehler in Github gemeldet wurde , dann ist es wahrscheinlich kein Fehler, da Sie vielleicht:
[(ngModel)]]=
, ODERformControlName
, mit derngModel
Richtlinie . Dies "wurde in Angular v6 veraltet und wird in Angular v7 entfernt" , da hierdurch beide Formstrategien gemischt werden , wodurch Folgendes erreicht wird:Wenn Sie eine Eingabe wie diese haben:
In der Browserkonsole wird eine Warnung zu gemischten Formularstrategien angezeigt:
Wenn Sie jedoch das
ngModel
als Wert in eine Referenzvariable einfügen, Beispiel:Der obige Fehler wird dann ausgelöst und es wird keine Warnung bezüglich des Strategiemischens angezeigt.
quelle
In meinem Fall musste ich hinzufügen
FormsModule
undReactiveFormsModule
dazushared.module.ts
:(danke an @Undrium für das Codebeispiel ):
quelle
Ich hatte dieses Problem und stellte fest, dass ich meine Komponente nicht an eine Variable gebunden hatte.
Geändert
<input #myComponent="ngModel" />
zu
<input #myComponent="ngModel" [(ngModel)]="myvar" />
quelle
Die korrekte Verwendung von Formularen in Angular2 lautet:
Der alte Weg funktioniert nicht mehr
quelle
Dieses Problem tritt auch auf, wenn versucht wird, reaktive Form- und Vorlagenformansätze zu kombinieren. Ich hatte
#name="ngModel"
und[formControl]="name"
auf dem gleichen Element. Durch Entfernen eines der beiden wurde das Problem behoben. Auch nicht, dass, wenn Sie verwenden,#name=ngModel
Sie auch eine Eigenschaft wie diese haben sollten[(ngModel)]="name"
, sonst erhalten Sie immer noch die Fehler. Dies gilt auch für die Winkel 6, 7 und 8.quelle
Überprüfen Sie, ob Sie beide
ngModel and name
Attribute in Ihrer Auswahl haben. Außerdem ist Select eine Formularkomponente und nicht das gesamte Formular. Eine logischere Deklaration der lokalen Referenz lautet: -Eine weitere wichtige Sache ist, dass Sie entweder
FormsModule
im Fall eines vorlagengesteuerten Ansatzes oderReactiveFormsModule
im Fall eines reaktiven Ansatzes importieren . Oder Sie können beide importieren, was auch völlig in Ordnung ist.quelle
Wenn
ngModule
die Eingabe nicht funktioniert, versuchen Sie, doppelte Anführungszeichen zu entfernenngModule
mögen
statt oben
quelle
Ich hatte dieses Problem, weil ich einen Tippfehler in meiner Vorlage in der Nähe von [(ngModel)] hatte. Zusätzliche Halterung. Beispiel:
quelle