向typescript类添加一个函数

时间:2017-11-29 17:56:45

标签: angular typescript

我正在尝试为我的角度模型添加格式化功能

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#构造函数)?

1 个答案:

答案 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();                                              
        }
    );