2017-02-23 16 views
0

私のエラーが見つかりません。Angular2別のサービスにサービスを注入

app.module.ts 
    ... 
    providers: [ValidateService,AuthService] 
    ... 

私は私のregister.component.tsで次の操作を行います。

ユーザーがデータベースに既に存在すると予想したがって、私は、ユーザーがコンソールに存在し得るよう
import {AuthService} from '../../services/auth.service'; 
... 
constructor(private _validateService: ValidateService, 
       private _fms: FlashMessagesService, 
       private _authService: AuthService, 
       private _router: Router 
       ) { } 
... 
ngOnInit() { 
     this._authService.uniqueUser({username:'zomh'}).subscribe(data => { 
     console.log("data.success: "+data.success);  
     if(!data.success) { // Username already exists  
     console.log('exists'); 
     } 
     else { 
     console.log('does not exist'); 
     } 
     }); 
    } 

作品。私はCannot read property _authService of undefined例外 enter image description here

を取得

import { AuthService } from './auth.service'; 
import { Injectable } from '@angular/core'; 
import { FormControl } from '@angular/forms'; 



@Injectable() 
export class ValidateService { 

    constructor(public _authService: AuthService) { } 

    validateRegister(user) { 
    if(user.name == undefined || user.email == undefined || user.username == undefined || user.password == undefined) 
     return false; 
    else 
     return true; 
    } 

    validateEmailPattern(c: FormControl) { 
    const re = /^(([^<>()\[\]\\.,;:\[email protected]"]+(\.[^<>()\[\]\\.,;:\[email protected]"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/; 

    if (re.test(c.value)) 
     return null; 
    else 
     return {invalidPattern:true}; 

    } 
    validateUsernamePattern(c: FormControl) { 
    const re = /^[A-Za-z0-9]+(?:[ _-][A-Za-z0-9]+)*$/ 

    if (re.test(c.value)) 
     return null; 
    else 
     return {invalidPattern:true}; 

    } 
    validateUsernameIsUnique (c: FormControl) { 

    let ret:any; 
    if (c.value.length >= 3) 
    { 
     console.log(c.value); 
     this._authService.uniqueUser({username:'zomh'}).subscribe(data => { 

     if(!data.success) { // Username already exists  
     console.log('call from service: exists'); 
     } 
     else { 
     console.log('call from service: does not exist'); 
     } 
     }); 

    } 

    return {usernameIsTaken:true}; 
    } 


} 

しかし、ここで:

私はかなり、かなり私のvalidate.service.tsで非常に同じことを(私はこの時点にそれを壊した)を行います私にとっては、サービスが正しく注入されなかったように見えます。しかし私は私の誤りを見つけることができません。

更新1: これで、authサービスコールをコンストラクタとその動作にコピーしました。したがって、これはいくつかある必要があります。私はthis._authServiceの値をコンストラクタの外の他のメソッドから取得できません。

@Injectable() 
export class ValidateService { 

    constructor(private _authService: AuthService) { 

     this._authService.uniqueUser({ username: 'zomh' }).subscribe(data => { 

     if (!data.success) { // Username already exists  
      console.log('call from service: exists'); 
     } 
     else { 
      console.log('call from service: does not exist'); 
     } 
     }); 
    } 

答えて

0

記事を読んだ後、私はインスタンスメソッドに私の方法を書き直し:

validateUsernameIsUnique = (c: FormControl) => { 

    let ret: any; 
    if (c.value.length >= 3) {  
     this._authService.uniqueUser({ username: c.value }).subscribe(data => { 

     if (!data.success) { // Username already exists  
      console.log('call from service: exists'); 
     } 
     else { 
      console.log('call from service: does not exist'); 
     } 
     }); 

    } 
... 

それは問題を修正しました。なぜこれをやらなければならないのかまだ分かりませんが、知識を自由に追加してください。

0

は、私はそのラインなしでそれを試してみてください

@Injectable間とexport class ValidateService {新しいラインを持つことができると思ういけません。

+0

新しい行を削除しましたか?残念ながら、まだ未定義のエラー – user3169083

+0

は、あなたの 'validateUsernameIsUnique'メソッドのすべてのコードですか?もしそうなら、あなたの括弧が正しく一致していないように見えるからです。 – Pytth

+0

私はメインポストを更新しましたので、ValidaiteServiceの完全なコードを見ることができます – user3169083

関連する問題