如何制作 Angular2 服务单例......再次
How to make Angular2 Service Singleton....again
请允许我再问这个关于如何在angular2中制作单例服务的问题。我正在尝试通过注入身份验证服务来实现身份验证保护。
但是,每当我访问受 auth guard 保护的路由时,注入服务的构造函数总是被调用。即 "console.log("authgaurd 已创建")" 和 "console.log("auth 服务已创建");"在下面的代码片段中,每次都会被调用,而不是一次。
我遵循了类似问题中提出的指导方针,包括:
但看起来我可能遗漏了一些东西...帮助?
使用@angular/core": "^2.3.1
//app.module.ts
import {AuthService} from "./auth.service";
import { AuthGuard } from './auth-guard.service';
@NgModule({
declarations: [
AppComponent
],
imports: [
QAModule,
AppRoutingModule,
],
providers: [AuthService,AuthGuard],
bootstrap: [AppComponent]
})
export class AppModule { }
服务
//auth.service
@Injectable()
export class AuthService {
constructor() {
console.log("auth services created");
}
}
//auth-guard.service
@Injectable()
export class AuthGuard implements CanActivate {
constructor( authService: AuthService) {
console.log("authgaurd created");
}
canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): boolean {
return true;
}
}
受保护的模块和路由
//qa-routing.module.ts
const routes: Routes =
[
{
path: 'qa',
component: QAComponent,
canActivate: [AuthGuard],
}
];
@NgModule({
imports: [
RouterModule.forChild(routes)
],
exports: [
RouterModule
]
})
export class QARoutingModule { }
//qa.module.ts
@NgModule({
imports: [
QARoutingModule
],
declarations: [
QAComponent
],
providers: [ ]
})
export class QAModule {}
//app.module.ts
import {AuthService} from "./auth.service";
import { AuthGuard } from './auth-guard.service';
@NgModule({
declarations: [
AppComponent
],
imports: [
QAModule,
AppRoutingModule,
],
providers: [AuthService,AuthGuard],
bootstrap: [AppComponent]
})
export class AppModule { }
//auth-guard.service
@Injectable()
export class AuthGuard implements CanActivate {
constructor(public authService: AuthService) {
console.log("authgaurd created");
}
canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): boolean {
return true;
}
}
嗯...是的,所以真正的问题:
我正在使用 bootstrap 导航栏并为 link 使用 href。每次我单击 link 时,它都会重新加载上下文,从而提供新的注入服务。将 linking 逻辑更改为使用 router.navigate 来解析。
请允许我再问这个关于如何在angular2中制作单例服务的问题。我正在尝试通过注入身份验证服务来实现身份验证保护。
但是,每当我访问受 auth guard 保护的路由时,注入服务的构造函数总是被调用。即 "console.log("authgaurd 已创建")" 和 "console.log("auth 服务已创建");"在下面的代码片段中,每次都会被调用,而不是一次。
我遵循了类似问题中提出的指导方针,包括:
但看起来我可能遗漏了一些东西...帮助?
使用@angular/core": "^2.3.1
//app.module.ts
import {AuthService} from "./auth.service";
import { AuthGuard } from './auth-guard.service';
@NgModule({
declarations: [
AppComponent
],
imports: [
QAModule,
AppRoutingModule,
],
providers: [AuthService,AuthGuard],
bootstrap: [AppComponent]
})
export class AppModule { }
服务
//auth.service
@Injectable()
export class AuthService {
constructor() {
console.log("auth services created");
}
}
//auth-guard.service
@Injectable()
export class AuthGuard implements CanActivate {
constructor( authService: AuthService) {
console.log("authgaurd created");
}
canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): boolean {
return true;
}
}
受保护的模块和路由
//qa-routing.module.ts
const routes: Routes =
[
{
path: 'qa',
component: QAComponent,
canActivate: [AuthGuard],
}
];
@NgModule({
imports: [
RouterModule.forChild(routes)
],
exports: [
RouterModule
]
})
export class QARoutingModule { }
//qa.module.ts
@NgModule({
imports: [
QARoutingModule
],
declarations: [
QAComponent
],
providers: [ ]
})
export class QAModule {}
//app.module.ts
import {AuthService} from "./auth.service";
import { AuthGuard } from './auth-guard.service';
@NgModule({
declarations: [
AppComponent
],
imports: [
QAModule,
AppRoutingModule,
],
providers: [AuthService,AuthGuard],
bootstrap: [AppComponent]
})
export class AppModule { }
//auth-guard.service
@Injectable()
export class AuthGuard implements CanActivate {
constructor(public authService: AuthService) {
console.log("authgaurd created");
}
canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): boolean {
return true;
}
}
嗯...是的,所以真正的问题:
我正在使用 bootstrap 导航栏并为 link 使用 href。每次我单击 link 时,它都会重新加载上下文,从而提供新的注入服务。将 linking 逻辑更改为使用 router.navigate 来解析。