如何使Angular2服务单例…再次
请允许我再问一次关于如何在angular2提供单人服务的问题。我正在尝试通过注入身份验证服务来实现身份验证保护 但是,每当我访问受auth-guard保护的路由时,总是调用注入服务的构造函数。i、 e.下面代码段中的“console.log(“authgaurd created”)”和“console.log(“auth services created”);”都会被每次调用,而不是一次 我遵循了类似问题中提出的指导原则,包括: 但看起来我可能错过了什么…救命啊 使用@angular/core“^2.3.1如何使Angular2服务单例…再次,angular,singleton,angular2-routing,angular2-services,angular2-guards,Angular,Singleton,Angular2 Routing,Angular2 Services,Angular2 Guards,请允许我再问一次关于如何在angular2提供单人服务的问题。我正在尝试通过注入身份验证服务来实现身份验证保护 但是,每当我访问受auth-guard保护的路由时,总是调用注入服务的构造函数。i、 e.下面代码段中的“console.log(“authgaurd created”)”和“console.log(“auth services created”);”都会被每次调用,而不是一次 我遵循了类似问题中提出的指导原则,包括: 但看起来我可能错过了什么…救命啊 使用@angular/core“
//app.module.ts
从“/auth.service”导入{AuthService}”;
从“./auth-guard.service”导入{AuthGuard};
@NGD模块({
声明:[
应用组件
],
进口:[
QA模块,
批准模块,
],
提供者:[AuthService,AuthGuard],
引导:[AppComponent]
})
导出类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 {}
嗯……是的,真正的问题是:
我使用引导导航栏和href链接。这反过来又会在每次单击链接时重新加载上下文,从而提供新的注入服务。已将链接逻辑更改为使用路由器。导航以解决问题。对不起,这是什么意思?我看到您更改了authguard构造函数,为其参数指定了一个公共修饰符。这似乎没什么区别。
//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;
}
}