として注入されていませんホームルートに送信し、認証ガードは、新しいインスタンスであるため、認証されたユーザのために未定義を返すユーザサービスの新しいインスタンスを起動するAngular2サービスは、私は以下のサービスが定義されていシングルトン
@Injectable()
export class AuthGuard implements CanActivate {
constructor(private router: Router, private _userService: UserService) { }
canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot) {
if (this._userService.getAuthenticatedUser()) //is undefined?????
{
return true;
}
// not logged in so redirect to login page with the return url
this.router.navigate(['/login'], { queryParams: { returnUrl: state.url }});
return false;
}
}
私のモジュールは、そのように宣言されています
@NgModule({
declarations: [
AppComponent,
LoginComponent,
HomeComponent,
ManageUsersComponent,
StandingDataComponent
],
imports: [
BrowserModule,
FormsModule,
HttpModule,
AppRoutingModule
],
providers: [AuthGuard,UserService],
bootstrap: [AppComponent]
})
export class AppModule { }
マイルーティングクラスは以下の通りです:
const appRoutes: Routes = [
{path: '', component: HomeComponent, canActivate:[AuthGuard]},
{ path: 'login', component: LoginComponent },
{path: 'home',
component:HomeComponent, canActivate:[AuthGuard],
children: [{path: 'manageusers', component: ManageUsersComponent, outlet: 'innerPage'},
{path: 'standingdata', component: StandingDataComponent, outlet: 'innerPage'}]
},
// otherwise redirect to home
{ path: '**', redirectTo: '' }];
@NgModule({
imports: [RouterModule.forRoot(appRoutes)],
exports: [RouterModule]
})
export class AppRoutingModule { }
ユーザーサービスのコンストラクタコードが発射され、両方のログインページがヒットしたときに、そして成功した場合認証が行われます。
この種の問題は、UserServiceがコンポーネントとモジュールの両方で定義されている場合に発生しますが、私の場合はモジュールが定義されている唯一の場所です。
問題はXY問題であり、それがシングルトンではないという前提が、答えを間違った方法で導きます。上記のコードから、シングルトン以外の何かをすることはできません。疑問がある場合は、グローバル変数に '_userService'を公開してチェックして、それらが等しいかどうかを確認してください。あなただけがこれを行うことができます。質問には[MCVE](http://stackoverflow.com/help/mcve)が必要です。 – estus
私は、コンストラクタ内のコードは、それがシングルトンではないことを複数回出したという事実を考えましたか? – jazza1000
コンストラクタに '' 'が1つだけあれば、そうです。コンストラクタ(; private_http:Http){console.log( "コンストラクタ";})の構文エラーがあるという事実は、実際のコードが何らかの方法で投稿したコードと異なることを示しています。私がA2 DIのことを知っているから、もしあなたがプロバイダー:[UserService]を持っていなければ、異なるインスタンスを持つことはできません。 – estus