実際のアプリケーションを作成して自分のapiをラップしようとしていますが、このエラーをデバッグする方法がわかりません。サービス参照サービスでコンストラクタがDIエラーの原因となる
lists.serviceで "private authService"を作成することは、エラーの原因のようです。ログインコンポーネントは正常に動作します。
EXCEPTION: Uncaught (in promise): Error: DI Error Error: DI Error at NoProviderError.ZoneAwareError (http://localhost:4200/polyfills.bundle.js:3270:33) at NoProviderError.BaseError [as constructor] (http://localhost:4200/vendor.bundle.js:29085:16) at NoProviderError.AbstractProviderError [as constructor] (http://localhost:4200/vendor.bundle.js:57951:16) at new NoProviderError (http://localhost:4200/vendor.bundle.js:58013:16) at ReflectiveInjector_._throwOrNull (http://localhost:4200/vendor.bundle.js:78274:19)........
リストをフェッチするサービスを一覧表示します。
import { Injectable } from '@angular/core';
import { Http, Headers, RequestOptions, Response } from '@angular/http';
import { Observable } from 'rxjs';
import 'rxjs/add/operator/map';
import { AuthService } from '../auth/auth.service';
@Injectable()
export class ListsService {
constructor(private http: Http, private authService: AuthService) { }
getLists(): Observable<boolean> {
// add jwt token to headers
let headers = new Headers({ 'Authorization': 'Bearer ' + this.authService.token });
let options = new RequestOptions({ headers: headers });
return this.http.post('http://localhost:8080/lists', options)
.map((response: Response) => response.json());
}
}
認証サービスのトークン
import { Injectable } from '@angular/core';
import { Http, Headers, Response } from '@angular/http';
import { Observable } from 'rxjs';
import 'rxjs/add/operator/map'
@Injectable()
export class AuthService {
public token: string;
constructor(private http: Http) {
let currentUser = JSON.parse(localStorage.getItem('currentUser'));
this.token = currentUser && currentUser.token;
}
login(email: string, password: string): Observable<boolean> {
return this.http.post('http://localhost:8080/login', { email: email, password: password })
.map((response: Response) => {
let token = response.json() && response.json().token;
if (token) {
// set token
this.token = token;
localStorage.setItem('currentUser', JSON.stringify({ email: email, token: token }));
return token;
} else {
return false;
}
}
);
}
logout(): void {
this.token = null;
localStorage.removeItem('currentUser');
}
}
これらのサービスはモジュール内でどこに定義されていますか? – estus
あなたの 'app.module.ts'に' @httpModule'を '@ angular/http'からインポートし、あなたの' AuthService'をプロバイダとして置くことを忘れないでください。あなたが望むのであれば、あなたの 'ListsService'コンストラクタで' @Inject(AuthService)private authService:AuthService'を使うことができます。 –