Jestem na RC4 i otrzymuję błąd Nie ma dyrektywy z "exportAs" ustawionym na "ngForm" z powodu mojego szablonu:
<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]);
/// więc oto moja lista rozwijana:
<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>
// mój ts komponentu:
przedstawiałem to w starych formach, takich jak ta:
categoryControlGroups:ControlGroup[] = [];
categories:ControlArray = new ControlArray(this.categoryControlGroups);
a teraz robię to:
categoryControlGroups:FormGroup[] = [];
categories:FormArray = new FormArray(this.categoryControlGroups);
myślisz, że to przyczyna problemu ??
Odpowiedzi:
Od 2.0.0.rc6 :
W skrócie:
FormsModule
do pliku@NgModule
.ReactiveFormsModule
do pliku@NgModule
.Więc dodaj do swojego
app.module.ts
lub odpowiednika:Brak jednego z tych modułów może prowadzić do błędów, w tym tego, z którym się spotykasz:
Jeśli masz wątpliwości, możesz podać oba te
FormsModule
elementyReactiveFormsModule
razem, ale są one w pełni funkcjonalne osobno. Po udostępnieniu jednego z tych modułów domyślne dyrektywy formularzy i dostawcy z tego modułu będą dostępne dla całej aplikacji.Stare Formularze używają
ngControl
?Jeśli masz te moduły u siebie
@NgModule
, być może używasz starych dyrektyw, takich jakngControl
, co jest problemem, ponieważ nie ma ichngControl
w nowych formularzach. Został zastąpiony mniej więcej * przezngModel
.Na przykład odpowiednik to
<input ngControl="actionType">
jest<input ngModel name="actionType">
, więc zmień to w swoim szablonie.Podobnie nie
ngForm
ma już eksportu kontroli, jest nim terazngModel
. Tak więc, w przypadku zastąpienia#actionType="ngForm"
z#actionType="ngModel"
.Zatem wynikowy szablon powinien wyglądać następująco
===>
:* Mniej więcej dlatego, że nie wszystkie funkcje
ngControl
zostały przeniesione dongModel
. Niektóre zostały właśnie usunięte lub są teraz inne. Przykładem jestname
atrybut, ten sam przypadek, który masz teraz.źródło
<input>
środku*ngFor
? (Prawdopodobnie nie będzie działać, ale spróbuj to i powiedz mi, czy komunikat zniknie:<option *ngFor="let actionType of actionTypes; let i = index" value="{{ actionTypes[i].label }}"> {{ actionTypes[i].label }} </option>
)*ngFor
?*ngFor
inną niżactionType
, dobra?Miałem ten sam problem. Brakowało mi znacznika importu modułu formularzy w pliku app.module.ts
źródło
Miałem ten sam problem, który został rozwiązany przez dodanie FormsModule do .spec.ts:
a następnie dodając import do beforeEach:
źródło
Jeśli zamiast tego otrzymujesz to:
Który został zgłoszony jako błąd w githubie , prawdopodobnie nie jest to błąd, ponieważ możesz:
[(ngModel)]]=
, LUBformControlName
, zngModel
dyrektywy . To „zostało wycofane w Angular v6 i zostanie usunięte w Angular v7” , ponieważ łączy obie strategie formularzy, co oznacza:Gdy masz takie dane wejściowe:
Wyświetli ostrzeżenie o strategiach formularzy mieszanych w konsoli przeglądarki:
Jeśli jednak dodasz
ngModel
jako wartość w zmiennej referencyjnej, przykład:Następnie wyzwalany jest powyższy błąd i nie jest wyświetlane żadne ostrzeżenie o mieszaniu strategii.
źródło
W moim przypadku musiałem dodać
FormsModule
iReactiveFormsModule
do tegoshared.module.ts
też:(podziękowania dla @Undrium za przykład kodu ):
źródło
Miałem ten problem i zdałem sobie sprawę, że nie powiązałem mojego komponentu ze zmienną.
Zmieniony
<input #myComponent="ngModel" />
do
<input #myComponent="ngModel" [(ngModel)]="myvar" />
źródło
Prawidłowy sposób użycia formularzy w Angular2 to:
Stary sposób już nie działa
źródło
Zrozumiano również, że ten problem pojawia się, gdy próbuje się połączyć podejście do formularza reaktywnego i formularza szablonu. Miałem
#name="ngModel"
i[formControl]="name"
na tym samym elemencie. Usunięcie jednego z nich rozwiązało problem. Nie oznacza to również, że jeśli używasz#name=ngModel
, powinieneś mieć również taką właściwość, jak ta[(ngModel)]="name"
, w przeciwnym razie nadal będziesz otrzymywać błędy. Dotyczy to również kątów 6, 7 i 8.źródło
Sprawdź, czy masz
ngModel and name
w swoim wyborze oba atrybuty. Również Select jest składnikiem formularza, a nie całym formularzem, więc bardziej logiczna deklaracja lokalnego odniesienia będzie wyglądać następująco: -Jeszcze jedną ważną rzeczą jest upewnienie się, że importujesz
FormsModule
w przypadku podejścia opartego na szablonie lubReactiveFormsModule
w przypadku podejścia reaktywnego. Lub możesz zaimportować oba, co również jest w porządku.źródło
jeśli
ngModule
nie działa na wejściu, oznacza to, że spróbuj ... usunąć podwójne cudzysłowyngModule
lubić
zamiast powyżej
źródło
Miałem ten problem, ponieważ miałem literówkę w moim szablonie w pobliżu [(ngModel)]]. Dodatkowy wspornik. Przykład:
źródło