2017-06-16 73 views
6

我正在學習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)" 
+0

CustomValidators是一個組件,一個服務,一個管道,類應該表示什麼? – Baruch

回答

14

您需要將提供程序添加到NgModule ,即module.ts在供應商下,

providers: [ 
    CustomValidators 
] 
+0

我已經嘗試過,但得到了這個錯誤! 「未捕獲的錯誤:無法解析所有參數」 你們是否知道涵蓋angular4中所有這些主題的任何教程? –

+0

然後您需要使用@inject並在構造函數中使用它 – Sajeetharan

0

從我能看到你錯過了兩件事情

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 
    ] 
}) 
相關問題