Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/31.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在使用Angular2执行CANActive之前,如何从服务响应获取数据_Angular_Angular2 Services_Angular2 Guards - Fatal编程技术网

在使用Angular2执行CANActive之前,如何从服务响应获取数据

在使用Angular2执行CANActive之前,如何从服务响应获取数据,angular,angular2-services,angular2-guards,Angular,Angular2 Services,Angular2 Guards,我正在尝试实现一个保护,它检查用户在访问视图之前是否保存了某些配置参数。配置表单和我想要保护的视图都是分开的 为此,我一直在尝试从服务(后端API)获取配置参数,因此我能够检查所需的填充是否为null,这样我就可以在canActivate方法中返回true或false,还可以使用Router导航 我尝试从Guard类的构造函数和canActivate方法获取响应,结果发现服务甚至没有被调用。我也尝试过用OnInit实现这个类,但没有成功 如何使canActivate方法在返回值true或fals

我正在尝试实现一个保护,它检查用户在访问视图之前是否保存了某些配置参数。配置表单和我想要保护的视图都是分开的

为此,我一直在尝试从服务(后端API)获取配置参数,因此我能够检查所需的填充是否为null,这样我就可以在canActivate方法中返回true或false,还可以使用Router导航

我尝试从Guard类的构造函数和canActivate方法获取响应,结果发现服务甚至没有被调用。我也尝试过用OnInit实现这个类,但没有成功

如何使canActivate方法在返回值true或false之前等待API响应

提前谢谢你

快速编辑。 我试过几种方法,包括:

import { Injectable } from '@angular/core';
import { CanActivate } from '@angular/router';

@Injectable()
export class ConfigurationGuard implements CanActivate{
  constructor(private service: Service) {}
  canActivate(){
    this.service.getConfigParameters().subscribe(parameters => {
      //if parameters are correct return true
      //else return false
    });
  }
}
还尝试:

import { Injectable } from '@angular/core';
import { CanActivate } from '@angular/router';

@Injectable()
export class ConfigurationGuard implements CanActivate{
  paramsCheck: boolean
  constructor(private service: Service) {
    this.service.getConfigParameters().subscribe(parameters => {
      //if parameters are correct paramsCheck=true
      //else paramsCheck=false
    });
  }
  canActivate(){
    if(paramsCheck){return true}
    return false
  }
}
并且还尝试使用ngOnInit

import { Injectable, OnInit } from '@angular/core';
import { CanActivate } from '@angular/router';

@Injectable()
export class ConfigurationGuard implements CanActivate,OnInit {
  paramsCheck: boolean
  constructor(private service: Service) { }
  ngOnInit(){
    this.service.getConfigParameters().subscribe(parameters => {
      //if parameters are correct paramsCheck=true
      //else paramsCheck=false
    });
  }
  canActivate(){
    if(paramsCheck){return true}
    return false
  }
}
这些选项都不起作用。我还尝试了一个服务调用方法,该方法返回一个布尔值,让我知道它从服务获得的配置参数是否正确,但没有骰子。
我猜必须在服务器端进行验证?

如果获取配置参数的服务返回一个可观察的
do

import { Injectable } from '@angular/core';
import { CanActivate } from '@angular/router';

@Injectable()
export class CanActivateViaAuthGuard implements CanActivate {

  constructor(private service : Service) {}

  canActivate() {
    this.service.getConfigurationParameters().subscribe(
        parameters => {
            // if parameters are correct return true
            // else return false
        });
  }
}

您可以使用路由器解析,然后从服务中获取数据,直到从服务中获取所有数据,路由才会发生。 请检查此链接以获取路由器解析的演示使用

例如

请找到我对类似问题的回答的链接


这是我的回购协议,其中我使用Router resolve

向我们展示了您一直在尝试的内容这是我尝试的第一件事,但在编译时出现了一个错误,迫使我在subscribe语句之外有一个返回值,因为我返回void,其中预期有一个可观察的布尔值。显然,canActivate()的工作方式与大多数方法不同。