TypeError: ce.forme._updateTreeValidity n'est pas une fonction
Je suis actuellement en utilisant des Formes Angulaires de la version 2.0.0 et essayer de faire de nous contacter modal avec un formulaire de contact à l'intérieur.
Immédiatement après la ContactComponent charges, j'obtiens:
EXCEPTION: ce.forme._updateTreeValidity n'est pas une fonction
-
J'ai déjà vu une autre pile postes ce qui suggère que l'utilisation de FormGroup au lieu de FormBuilder à init de l'objet de formulaire dans le volet constructeur est maintenant en standard avec la nouvelle API j'ai donc mis à jour.
-
- Je importer ReactiveFormsModule et FormsModule avec l'ensemble de la forme des composantes connexes et l'erreur ne semble pas être un module lié.
-
Mon Tapuscrit n'est pas en jetant des erreurs au moment de la compilation et de l'Intellisense de Visual Studio semble être en mesure de trouver tous les FormGroup fonctionne bien, donc pourquoi est-ce qui se passe au moment de l'exécution?...
Mon code:
contact.composante.ts:
import { Component, Input, ViewChild } from '@angular/core';
import { ApiService } from '../../../services/api.service';
import { ModalComponent } from 'ng2-bs3-modal/ng2-bs3-modal';
import { Router, ActivatedRoute, Params } from '@angular/router';
import { FormsModule, ReactiveFormsModule, FormGroup, FormControl, Validators } from '@angular/forms';
import 'rxjs/Rx';
declare var jQuery: any;
@Component({
selector: 'my-contact',
templateUrl: 'app/modules/footer/contact/contact.html'
})
export class ContactComponent {
private contactForm: FormGroup;
private invalidEmail: boolean;
private invalidSubject: boolean;
private invalidMessage: boolean;
constructor(private apiService: ApiService, private router: Router, private route: ActivatedRoute) {
this.contactForm = new FormGroup({
emailControl: new FormControl('', <any>Validators.required),
subjectControl: new FormControl('', <any>Validators.required),
messageControl: new FormControl('', <any>Validators.required)
});
}
submit() {
if (this.contactForm.valid) {
this.apiService.sendMessage(this.contactForm.controls['emailControl'].value, this.contactForm.controls['subjectControl'].value, this.contactForm.controls['messageControl'].value);
}
if (!this.contactForm.controls['emailControl'].valid) {
this.invalidEmail = true;
}
if (!this.contactForm.controls['subjectControl'].valid) {
this.invalidSubject = true;
}
if (!this.contactForm.controls['messageControl'].valid) {
this.invalidMessage = true;
}
}
ngOnInit() {
this.invalidEmail = false;
this.invalidSubject = false;
this.invalidMessage = false;
}
}
contact.html:
<modal-header class="c-no-border" [show-close]="true">
<h4 class="modal-title text-uppercase">Send us a message</h4>
</modal-header>
<form novalidate #contactForm [formGroup]="contactForm" (ngSubmit)="submit()">
<div class="modal-body">
<div class="form-group">
<label for="email" class="control-label">Email</label>
<input name="email" formControlName="emailControl" placeholder="" type="text" class="c-square form-control c-margin-b-20" id="email">
<div class="c-font-red-1" *ngIf="invalidEmail" style="position: absolute;">*Required</div>
<label for="subject" class="control-label">Subject</label>
<input name="subject" formControlName="subjectControl" placeholder="" type="text" class="c-square form-control c-margin-b-20" id="subject">
<div class="c-font-red-1" *ngIf="invalidSubject" style="position: absolute;">*Required</div>
<textarea formControlName="messageControl" style="resize: vertical;" class="c-square form-control c-margin-b-20" id="content" (keyup.enter)="submit()"></textarea>
<div class="c-font-red-1" *ngIf="invalidMessage" style="position: absolute;">*Required</div>
</div>
</div>
<modal-footer class="c-no-padding">
<button type="button" class="btn c-btn-square c-btn-bold c-btn-uppercase pull-right">Cancel</button>
<button type="submit" class="btn c-theme-btn c-btn-square c-btn-bold c-btn-uppercase pull-right" style="margin-right: 10px;">Send</button>
</modal-footer>
</form>
app.le module.ts:
import { NgModule, enableProdMode } from '@angular/core';
import { BrowserModule } from '@angular/platform-browser';
import { AppComponent } from './app.component';
import { FormsModule, ReactiveFormsModule } from '@angular/forms';
import { Ng2Bs3ModalModule } from 'ng2-bs3-modal/ng2-bs3-modal';
import { QueuesModule } from './modules/queues/queues.module';
import { OrderModule } from './modules/order/order.module';
import { AccountModule } from './modules/account/account.module';
import { AdminModule } from './modules/admin/admin.module';
import { routing } from './app.routing';
import { GridModule } from '@progress/kendo-angular-grid';
import { SplashComponent } from './modules/splash/splash.component';
import { ContactComponent } from './modules/footer/contact/contact.component';
import { SharedModule } from './shared/shared.module';
import { EmailValidator } from './shared/utilities/custom-validators'
import { CookieService } from 'angular2-cookie/services/cookies.service';
import { HttpModule, Response } from '@angular/http';
import { StringService } from './services/string.service';
import { ApiService } from './services/api.service';
import { UserService } from './services/user.service';
import { OrderService } from './services/order.service';
import { OrderGuard } from './services/order-guard.service';
import { FooterComponent } from './modules/footer/footer.component';
import { ErrorComponent } from './modules/error/error.component';
import { CustomFormsModule } from "ng2-validation";
@NgModule({
imports: [
BrowserModule,
FormsModule,
ReactiveFormsModule,
HttpModule,
QueuesModule,
OrderModule,
AccountModule,
AdminModule,
routing,
GridModule,
SharedModule,
Ng2Bs3ModalModule,
CustomFormsModule
],
declarations: [
AppComponent,
SplashComponent,
FooterComponent,
ErrorComponent,
ContactComponent
],
providers: [
StringService,
ApiService,
UserService,
CookieService,
OrderService,
OrderGuard
],
bootstrap: [AppComponent],
exports: [
]
})
export class AppModule {
}
#contactForm
apparaît à cause d'un conflit de nom et de faire exploser le modèle de processeur. Aussi, si vous écrivez un model driven forme, il est souhaitable de n'importer ReactiveFormsModule
à appliquer uniquement à l'écriture de formes réactives. Il devient plus évident quand vous n'avez pas le double d'importation que la variable de modèle bind est le problème.Je vous remercie beaucoup qu'il fixe!
Ouais je savais que FormsModule semble redondant, mais je l'avais mis là pour faire bonne mesure. Je suppose que je ne les utilise pas maintenant qu'il semble y avoir des conflits.
OriginalL'auteur Harish Vangavolu | 2016-11-30
Vous devez vous connecter pour publier un commentaire.
La liaison de la variable de modèle
#contactForm
apparaît à cause d'un conflit de nom et de faire exploser le modèle de processeur, comme il tente de transformer le modèle ci-joint variable enNgForm
sur le backend. Partout j'ai vu model driven formes utilisées, il n'est pas de variable de modèle de liaison sur la forme, alors qu'il y a un#tv="ngForm"
utilisé dans les modèles de formulaires. Il semble qu'il y avait une miss sur le mélange de ces deux formes d'approches qui a entraîné dans l'erreur.Retirant simplement il va résoudre le problème.
OriginalL'auteur silentsod
J'ai eu une forme dynamique. J'ai eu d'erreur ci-dessus puisque je n'ai pas l'init de l'intérieur de la
constructor()
Solution:
OriginalL'auteur Sampath