2

angular2でシングルトンサービスを作成する方法について、この質問をもう一度させてください。認証サービスが注入された認証ガードを実装しようとしています。

ただし、認証ガードによって保護されているルートにアクセスするたびに、注入されたサービスのコンストラクターが常に呼び出されます。つまり、「console.log("authgaurd created")」と「console.log("auth services created");」の両方です。以下のスニペットでは、1 回ではなく毎回呼び出されます。

私は次のような同様の質問で提案されているガイドラインに従いました: How to make Angular2 Service singleton?

しかし、何かが足りないようです...助けてください。

@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 {}
4

2 に答える 2

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

}
于 2017-03-22T06:49:12.920 に答える