我正在尝试为我的角度模型添加格式化功能
export class Site {
Id: number;
EstablishedDate: Date;
CreatedDate: Date;
ModifiedDate: Date;
Name: string;
URL: string;
public Format() {
console.log("formatting");
return (this);
}
}
然后像这样使用
this.API.Get(params['id']).subscribe(
res => {
this.self = res.Format();
}
);
以下是将此绑定在一起的服务
import { Injectable } from '@angular/core';
import { HttpClient } from "@angular/common/http";
import { Site } from '../../models/site.model';
import { UtilitiesService } from "../utilities/utilities.service";
@Injectable()
export class SitesService {
constructor(private http: HttpClient, private Utils: UtilitiesService) { }
GetAll() {
return this.http.get<Site[]>("/sites/getall");
}
Get(id: string) {
return this.http.get<Site>("/sites/get?id=" + id);
}
}
这编译得很好但我执行TypeError: res.Format is not a function
。
次要问题 - 有没有办法在对象被填充时自动触发该函数(类似于c#构造函数)?
答案 0 :(得分:1)
问题是res
实际上不是Site
类型。它将是一个JSON
对象,其中包含站点类的数据字段。您可以将类转换为仅包含字段的接口,并使该方法成为接受某种类型接口的函数,或者您可以向类中添加构造函数并从res
创建新对象
第二个选项看起来像这样:
export class Site {
Id: number;
EstablishedDate: Date;
CreatedDate: Date;
ModifiedDate: Date;
Name: string;
URL: string;
public constructor(cfg: Partial<Site>) {
Object.assign(this, cfg);
}
public Format() {
console.log("formatting");
return (this);
}
}
this.API.Get(params['id']).subscribe(
res => {
const site = new Site(res);
this.self = site.Format();
}
);