简体   繁体   English

Angular 2中的CanActivate返回未定义

[英]CanActivate in Angular 2 return undefined

I need that canActivate do not skip further until json loads, for this I put a check if canActivate is not undefined, it returned false, but in the console it outputs that canActivate is passed and with the value undefined. 我需要canActivate在json加载之前不要进一步跳过,为此,我检查了canActivate是否未定义,它返回false,但是在控制台中它输出了canActivate被传递并且值为undefined。 What I'm doing is wrong, I'll be grateful for help, thanks. 我正在做的事情是错误的,感谢您的帮助,我将不胜感激。

My http-data.service 我的http-data.service

import {Injectable} from '@angular/core';
import {Http} from '@angular/http';
import {Response} from '@angular/http';
import {Observable} from 'rxjs/Observable';
import 'rxjs/add/operator/map';
import {CanActivate, ActivatedRouteSnapshot, RouterStateSnapshot} from "@angular/router";

@Injectable()
export class HttpService implements CanActivate{
    constructor(private http: Http) {}

    dataModules = this.getDataModules();
    dataPresets = this.getDataPresets();
    dataModuleItems = this.getDataModuleItems();
    data: any[];

    canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot) : Observable<boolean> | boolean {
            if (this.getDataModules !== undefined) {
                console.log('canActivate');
                console.log(this.getDataModules());
                return true;
            } else return false;
    }

    getDataOrganizations(): Observable<any[]>{
        return this.http.get('http://localhost:3010/data')
            .map((resp:Response)=>{
                let dataOrganizations = resp.json().organization;
                return dataOrganizations;
            });
    }

    loadDataModules(): Observable<any[]> {      
        return this.http.get('http://localhost:3010/data')
            .map((resp: Response)=> {
                let dataModules = resp.json().modules;
                return dataModules;
            });
    }

    loadDataPresets(): Observable<any[]> {      
        return this.http.get('http://localhost:3010/data')
            .map((resp: Response)=> {
                let dataPresets = resp.json().presets;
                return dataPresets;
            });
    }

    loadDataModuleItems(): Observable<any[]> {      
        return this.http.get('http://localhost:3010/data')
            .map((resp: Response)=> {
                let dataModuleItems = resp.json().module_items;
                return dataModuleItems;
            });
    }

    loadData() {
        return this.http.get('http://localhost:3010/data')
            .map((resp: Response)=> {
                let data = resp.json();
                return data;
            });
    }

    getDataModules(): any[] {
        this.loadDataModules().subscribe(((modules)=>{this.dataModules = modules; console.log('в http modules');console.log(this.dataModules);}));
        return this.dataModules;
    }


    getDataPresets(): any[] {
        this.loadDataPresets().subscribe(((presets)=>{this.dataPresets = presets; console.log(this.dataPresets);}));
        return this.dataPresets;
    }


    getDataModuleItems(): any[] {
        this.loadDataModuleItems().subscribe(((moduleItems)=>{this.dataModuleItems = moduleItems; console.log(this.dataModuleItems);}));
        return this.dataModuleItems;
    }
}

canActivate:未定义[![] [1] ] 2 ] 2

在此处输入图片说明

Until you subscribe to the response your data will be undefined 在您订阅响应之前,您的数据将是undefined

 getDataOrganizations(): Observable<any[]>{
    let dataOrganizations :any[]
        return this.http.get('http://localhost:3010/data')
            .map(response => response.json().organization)
            .subscribe(data =>  {       
                dataOrganizations = data;
                return dataOrganizations; 
        });
    }

Now you will get the object 现在您将得到对象

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM