[英]How to solve “Error: Uncaught (in promise): Error: No provider for” error in Ionic 3
我正在學習Ionic 3,當我嘗試制作一個檢查唯一用戶名的自定義驗證器時,我遇到了這個錯誤。 我盡我所能但無法解決這個問題。
CustomValidators.ts
import { Directive, Input } from '@angular/core';
import { FormControl, Validator, AbstractControl } from '@angular/forms';
import { Http, Response, Headers, RequestOptions } from '@angular/http';
import {Observable} from 'rxjs/Rx';
export class CustomValidators {
constructor(public http: Http){}
public hasUniqueEmail(
control: FormControl,
){
return this.http.get('assets/users.json')
.map(res => res.json())
.catch((error:any) => Observable.throw(error.json().error || 'Server error'));
}
}
signup.ts
import { Component } from '@angular/core';
import { IonicPage, NavController, NavParams } from 'ionic-angular';
import { FormBuilder, FormGroup, Validators } from '@angular/forms';
import { CustomValidators } from '../../components/CustomValidators';
/**
* Generated class for the SignupPage page.
*
* See http://ionicframework.com/docs/components/#navigation for more info
* on Ionic pages and navigation.
*/
@IonicPage()
@Component({
selector: 'page-signup',
templateUrl: 'signup.html',
})
export class SignupPage {
private sform : FormGroup;
constructor(
private formBuilder: FormBuilder,
private myValidator: CustomValidators,
){
this.sform = this.formBuilder.group({
name: ['', Validators.compose([Validators.maxLength(30), Validators.pattern('[a-zA-Z ]*'), Validators.required])],
email: ['', Validators.compose([Validators.email,this.myValidator.hasUniqueEmail])],
password: ['',Validators.required ],
});
}
logForm() {
}
}
這是我得到的錯誤:
"Uncaught (in promise): Error: No provider for CustomValidators!
Error
at Error (native)
at injectionError (http://localhost:8100/build/main.js:1583:86)
at noProviderError (http://localhost:8100/build/main.js:1621:12)
at ReflectiveInjector_._throwOrNull (http://localhost:8100/build/main.js:3122:19)
at ReflectiveInjector_._getByKeyDefault (http://localhost:8100/build/main.js:3161:25)
at ReflectiveInjector_._getByKey (http://localhost:8100/build/main.js:3093:25)
at ReflectiveInjector_.get (http://localhost:8100/build/main.js:2962:21)
at NgModuleInjector.get (http://localhost:8100/build/main.js:3909:52)
at resolveDep (http://localhost:8100/build/main.js:11369:45)
at createClass (http://localhost:8100/build/main.js:11225:91)"
您需要將提供程序添加到NgModule,即提供程序下的module.ts,
providers: [
CustomValidators
]
從我所看到的你遺漏了兩件事
1)沒有類的裝飾器,你導入Directive
但從不使用它
import { Directive } from '@angular/core';
@Directive({
name: 'directive-name'
})
export class CustomValidators {
//...
}
2)NgModule中沒有導入
import { CustomValidators } from 'path/to/file';
@NgModule({
//...
providers: [
CustomValidators
]
})
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.