0

私は次のようにガードを作成しています:

// MyGuard.ts
import { Injectable, Component } from '@angular/core';
import { ActivatedRouteSnapshot, CanActivate, RouterStateSnapshot } from '@angular/router';

import { MyService } from './services/MyService';

@Component({
  providers: [MyService]
})

@Injectable()
export class MyGuard implements CanActivate {
  constructor(public s : MyService) {}

  canActivate(next: ActivatedRouteSnapshot, prev: RouterStateSnapshot) {
    this.s.doSomething();
    return true;
  }
}

サービスはこちら:

// MyService.ts
import { Injectable } from '@angular/core';
import * as _ from 'lodash';

@Injectable()
export class MyService {
  constructor() {
  }

  public doSomething() {
    return this;
  }
}

ページをロードすると、次のエラーが表示されます。

Error: Uncaught (in promise): No provider for MyService! (MyGuard -> MyService)

サービスを宣言するMyGuardのコンストラクターの行を削除すると

...
export class MyGuard implements CanActivate {
  constructor() {} // <--- here
  ...

エラーなしでページを読み込むことができます。私は何を間違っていますか?

4

2 に答える 2

1

MyServiceアプリケーションをブートストラップするときに、サービスをプロバイダーとして指定する必要があります。

bootstrap(AppComponent, [
  (...)
  MyService, MyGuard
]);
于 2016-07-28T21:00:26.537 に答える
0

サービスを宣言する必要はなく、コンストラクターに追加してから、これを使用して変数を使用します

constructor(private myService: MyService) {
}

func()
{
this.myService //like this
}

また、このようにブートストラップに追加します

bootstrap(AppComponent, [ 
  APP_ROUTER_PROVIDERS,
  MyService
]).catch(err => console.error(err));
于 2016-07-28T21:01:43.660 に答える