首页 > 解决方案 > 错误类型错误:未定义。何时从服务中提供数据

问题描述

我正在尝试创建一个处理程序,该处理程序将根据此“资源”是否存在“类别”来创建一个类别数组。最后一个方法抛出错误。错误类型错误:“this.allProjectResources 未定义”

import { ResourceCategory } from './resourceCategory';
import { Injectable } from '@angular/core';
import { Resource } from './resource';
import { HttpService } from '../project/http.service';
import { isNullOrUndefined } from 'util';

@Injectable()
export class ResourceService {

    public allProjectResources: Resource[];
    public allResourceCategories: ResourceCategory[];

    uniqueResCategories = new Set();

    constructor(private http: HttpService) { }

    getAllResourcesByProjId(projid: number) {
        if (!(isNullOrUndefined(this.allProjectResources))) {
            this.allProjectResources.length = 0;
        }
        this.http.getAllResourcesById(projid).subscribe((data: Resource[]) => 
        this.allProjectResources = data);
    }
    getAllResourceCategories() {
        this.http.getAllResourceCategories().subscribe((data: ResourceCategory[]) =>
        this.allResourceCategories = data);

    }
    getAllUniqieResourceCategories(){
        this.allProjectResources.forEach(resource => {
            this.allResourceCategories.forEach(function (category) {
                if (resource.resourceCategoryId == category.id) {
                    this.uniqueResCategories.add(category.name);
                    console.log(category.name);
                };
            });
        });
    }
}

标签: javascriptangulartypescript

解决方案


将类变量初始化为空数组

public allProjectResources: Resource[] = [];
public allResourceCategories: ResourceCategory[] = [];

此外,您应该在getAllResourcesByProjId()方法中分配空数组而不是改变长度属性

getAllResourcesByProjId(projid: number) {
        if (!(isNullOrUndefined(this.allProjectResources))) {
           // this.allProjectResources.length = 0;
            this.allProjectResources = [];
        }
        ...
}

推荐阅读