如何使Angular2服务单例…再次

如何使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“

请允许我再问一次关于如何在angular2提供单人服务的问题。我正在尝试通过注入身份验证服务来实现身份验证保护

但是,每当我访问受auth-guard保护的路由时,总是调用注入服务的构造函数。i、 e.下面代码段中的“console.log(“authgaurd created”)”和“console.log(“auth services created”);”都会被每次调用,而不是一次

我遵循了类似问题中提出的指导原则,包括:

但看起来我可能错过了什么…救命啊

使用@angular/core“^2.3.1

//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;
    }

}