Angular2,在运行时创建模型

时间:2019-02-27 10:08:59

标签: angular class model runtime

我是新手angular2,有没有一种在运行时创建模型(或类)的方法。

标准技术是在单独的文件(例如Hero.ts,Customer.ts,Salesman.ts等)中声明它

但是由于应用程序的性质,它自身的数据库结构经常需要更改。

我们的策略是使用WebAPI以字符串JSON格式获取模型/类结构,并基于下载的JSON字符串在运行时创建模型/类结构。

我们如何用TypeScript完成?

谢谢

2 个答案:

答案 0 :(得分:0)

您的数据库结构经常更改吗?听起来很令人兴奋。 :)我会为您提到的每个模型创建一个接口,但是将属性标记为可选:

openCloseNav

然后,您可以从HTTP响应中获取对象,并说它们属于Hero类型。

答案 1 :(得分:0)

啊……实际上是在英雄之旅文档的开始,即 类型检查之前。链接:https://angular.io/guide/http#getting-json-data

不需要类型检查。只是推荐而已。

演示

处理JSON对象:

使用可观察对象(异步)

a.service.ts

import { Injectable } from '@angular/core';
import { HttpClient } from '@angular/common/http';

@Injectable()
export class AService {
  constructor(private http: HttpClient) { }

  getData() {
    return this.http.get('http://something.com/api'); // Returns an observable
  }
}

a.component.ts

export class AComponent {
  constructor(private service: AService) { }

  doSomething() {
    this.service.getData().subscribe((data) => {
      // do things here
    });
  }
}

使用promise和async / await(同步)

如果请求是一次性请求,并且您不需要操纵可观察对象中的数据,则可以使用Promises和async / await编辑原始JS对象数据:

a.service.ts

import { Injectable } from '@angular/core';
import { HttpClient } from '@angular/common/http';

@Injectable()
export class AService {
  constructor(private http: HttpClient) { }

  getData() {
    return this.http.get('http://something.com/api').toPromise(); // Returns a promise
  }
}

a.component.ts

export class AComponent {
  constructor(private service: AService) { }

  async doSomething() {
    const data = await this.service.getData();
    // do things here
  }
}