2017-06-27 53 views
0

在另一服務中注入服務時遇到問題。 我得到了一個ContactService以使用handleError方法從服務器獲取數據。 我得到一個AlertService從handleError方法拋出錯誤。 我已經在我的核心模塊中聲明瞭contactService和AlertService。 但是當我調用alertService.submitNewMessage時,它顯示this.alertService是未定義的。 請幫助在其他服務角2中注入服務時遇到問題

@Injectable() 
export class AlertService { 
    private $currentMessages: BehaviorSubject<string> = new BehaviorSubject(''); 
    public currentMessages: Observable<string> = this.$currentMessages.asObservable(); 
    constructor() { } 

    submitNewMessage(msg: string): void { 
    this.$currentMessages.next(msg); 
    } 

} 

,並聯系服務

@Injectable()  
export class ContactService { 


     private contactsUrl = 'http://localhost/customers'; 
     constructor(
        private http: Http, 
        private router: Router, 
        private alertService: AlertService 
       ) { } 

     getContactsFromService(): Observable<SubmitCustomerHttp[]> { 
     return this.http.get(this.contactsUrl) 
         .map(this.extractData) 
         .catch(this.handleError); 
     } 

     private extractData(res: Response) { 
     return HttpHelper.extractData(res); 
     } 

     handleError(error: Response | any) { 
     let errMsg: string; 
     console.log('Receive error: ', error); 
     if (error instanceof Response) { 
      const body = error.json() || ''; 
      const err = body.error || JSON.stringify(body); 
      errMsg = `${error.status} - ${error.statusText || ''} ${err}`; 
      if (error.status === 500 || 400 || 404) { 
      window.alert(errMsg); 
      this.alertService.submitNewMessage(errMsg); 
      return errMsg; 
      } 
     } else { 
      errMsg = error.message ? error.message : error.toString(); 
      console.log('Error Message: ', errMsg); 
      return null; 
     } 
     } 
    } 

我的核心模塊

@NgModule({ 
    imports: [ 
    CommonModule, 
    HttpModule, 
    JsonpModule 

    ], 
    declarations: [], 
    providers: [ 
    AlertService, 
    ContactService, 

    ] 
}) 


export class CoreModule { 
    static forRoot(): ModuleWithProviders { 
    return { 
     ngModule: CoreModule, 
     providers: [ 
     AlertService, 
     ContactService, 

     ] 
    }; 
    } 
} 
+0

這裏是alertService代碼.submitNewMessage? – Sajeetharan

+0

@Sajeetharan對不起,我的錯誤,我會修復它 – TheRemjx

+0

你contactservice沒有用@Injectable裝飾 –

回答

1

我懷疑是關係到

return this.http.get(this.contactsUrl) 
       .map(this.extractData) 
       .catch(this.handleError); 

這個問題我註冊類thods作爲回調,這是不正確的,因爲this將無法​​正確綁定。

您可以通過在箭頭的功能包裝這些解決這個問題,讓this仍然會參考服務,而不是回調函數的代碼時殺入內線:

return this.http.get(data => this.contactsUrl(data)) 
       .map(data => this.extractData(data)) 
       .catch(data => this.handleError(data)); 
+0

我改變了你的評論,但仍然是這樣的消息:eError:無法讀取屬性'submitNewMessage'undefined – TheRemjx

+0

嘿,夥計。謝謝你的幫助。經過多次重建之後,'這個'上下文已被修復 – TheRemjx

+0

給那個男人一個啤酒! – megalucio