javascript - 访问 @CanActivate 钩子(Hook)中的服务

标签 javascript angular

当从 Angular 的 @CanActivate Hook 访问该服务时,我无法找到访问该服务并正确配置其依赖项的方法。

在实例化组件之前,我需要首先检查用户是否已通过身份验证。我的钩子(Hook)看起来像:

import {AuthenticationService} from '../authentication/authentication.service';

.................

@CanActivate((next, prev) => {
  var injector = Injector.resolveAndCreate([
    AuthenticationService
  ])

  var authService = injector.get(AuthenticationService);

  return authService.getUser();
})

export class ShellComponent { }

我收到的错误是异常:没有 Http 提供程序! (AuthenticationService -> Http)。应该注意的是,HTTP_PROVIDERS 在应用程序引导时注入(inject)。

我的身份验证服务如下:

import {Injectable} from 'angular2/core';
import {Http} from 'angular2/http';

@Injectable()
export class AuthenticationService {

  constructor(private _http:Http) {}

  getUser() {
    var resolver = function(resolve, reject) {
        setTimeout(function doneCounting() {
            resolve(true);
        }, 5000);
    }

    return new Promise<Boolean>(resolver);
  }
}

任何帮助或见解将不胜感激。

最佳答案

您所需要做的就是将此依赖项添加到resolveAndCreate,因此您的代码将是:

 var injector = Injector.resolveAndCreate([HTTP_PROVIDERS, AuthenticationService])

关于javascript - 访问 @CanActivate 钩子(Hook)中的服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34482310/

相关文章:

javascript - 选择元素验证在 JavaScript 中不起作用

php - 如何在 ionic 4 MYSQL 和 PHP 中将图像上传到数据库?

javascript - 使用 ngx-filter-pipe angular 过滤多个值

javascript - @input 双向绑定(bind)不起作用

javascript - jquery - 对任何事件执行效果

javascript - 从 vue 中的子组件访问 key

javascript - .on ("click"、 function () {}) 和 .click (function () {}) 之间有什么区别?

javascript - 是否有一个小的 css 1 javascript 函数/库来检索元素?

Angular Material Progress 微调器和进度条不显示

javascript - 使用 Angular Directive(指令)更改选定的列表元素颜色