Angular 函数未定义在TypeScript中具有角度2的组件引用的普通对象上
我有一个角度分量和普通类 普通类上定义了一个枚举,如下所示:Angular 函数未定义在TypeScript中具有角度2的组件引用的普通对象上,angular,typescript,undefined,Angular,Typescript,Undefined,我有一个角度分量和普通类 普通类上定义了一个枚举,如下所示: export class ShieldRequest { state: ShieldRequest.StateType; stateAsString(): string { return ShieldRequest.StateType[+this.state]; } } export module ShieldRequest { export enum StateTy
export class ShieldRequest {
state: ShieldRequest.StateType;
stateAsString(): string {
return ShieldRequest.StateType[+this.state];
}
}
export module ShieldRequest {
export enum StateType {
Untouched = 0,
Rejected = 1,
Accepted = 2
}
}
我需要我的组件能够引用此对象的状态字段。但它需要字符串表示,因此需要stateAString()方法
我的组件如下所示:
import { Component, OnInit, Input } from '@angular/core';
import { ShieldRequest } from './shield-request';
@Component({
moduleId: module.id,
selector: 'shield-request',
templateUrl: 'shield-request.component.html'
})
export class ShieldRequestComponent implements OnInit {
@Input()
shieldRequest: ShieldRequest;
constructor() { }
ngOnInit() { }
get state(): string {
return this.shieldRequest.stateAsString(); // throws not defined...
// return ShieldRequest.StateType[+this.shieldRequest.state]; // works fine!
}
}
如上面的注释所示,state属性的第一行抛出一个异常,即函数未定义,但第二行可以正常工作。错误如下所示:
EXCEPTION: Error in http://localhost:3000/app/shield-request.component.html:8:52 caused by: this.shieldRequest.stateAsString is not a function
我曾尝试在网上搜索,以找出发生这种情况的原因,但似乎找不到相关信息。有人能解释一下为什么会发生这种情况吗
编辑:
以下是ShieldRequest对象在服务中的实例化方式:
import { Injectable } from '@angular/core';
import { Http } from '@angular/http';
import { Observable } from 'rxjs';
import 'rxjs/Rx';
import { ShieldRequest } from './shield-request';
@Injectable()
export class ShieldRequestService {
private apiUrl: string = 'http://localhost:24576/api/';
private resourceUrlPart: string = 'request/';
constructor(private http: Http) { }
getAllRequests(): Observable<ShieldRequest[]> {
return this.http.get(this.apiUrl + this.resourceUrlPart).map(response => response.json() as ShieldRequest[]);
}
}
最后,在这里您可以看到如何创建屏蔽请求组件和传递输入(这是get.component.html文件):
正在加载请求。。。
您已将SheildRequest定义为模块和类:
export class ShieldRequest
export module ShieldRequest
如果它们在同一个文件中,那就是你的问题。导入时:
import { ShieldRequest } from './shield-request';
谁知道你在进口什么。即使不是这样,也不要用相同的名称命名两个对象。您确定要通过的对象是实际类型的
@Input
。其他一切似乎都很好是的,如第2个代码块中的注释所示,第2行可以很好地访问通过@Input
传入的本地ShieldRequest
对象。我不是TypeScript专家,但您使用的名称ShieldRequest
看起来模棱两可。您确定在导入ShieldRequest时,在同一个文件中得到的是具有相同名称的类而不是模块吗?老实说,我也是这样,但如果是这样的话,我似乎无法像现在这样使用对象的实例。我也无法在我的代码中使用静态定义的enumStateType
,因此我唯一的结论是导入类型会同时导入文件的模块和类部分。我认为shieldRequest不是shieldRequest的实例。可以显示什么是传递的输入吗?但是我可以在同一个类中使用枚举值和对象定义。我的模块只是定义不能在类中定义的静态枚举。我将尝试一下,然后标记它,如果它修复了它。干杯。我想我不是在用同一个名字命名两个物体吗?一个是模块(一个静态声明容器),另一个是类(一个对象的蓝图)。我明白你的意思,但我认为你这样做会得到意想不到的行为。我也可能错了。
export class ShieldRequest
export module ShieldRequest
import { ShieldRequest } from './shield-request';