javascript - 用于组件目的的 Angular 扩展 API 模型
问题描述
我经常需要使用仅在组件视图中使用的参数来扩展我的 API 模型。
例如我有一个模型:
export class Person {
name: string;
surname: string;
address: string;
}
这是我从 API 得到的:
getPersons(): Observable<Person[]> {
return this.httpClient.get<Person[]>`${environment.API}/person`);
}
当我在我的组件中得到这个时,我经常需要使用参数/属性扩展模型,我在请求后进行数据处理,或者只是简单的“活动”/“选择”参数用于 UI 可视化跟踪。
为此目的使用哪种方法。我知道2个解决方案:
1)向类模型添加参数,即使该参数不参与服务器响应,只需将它们与标准参数分开即可:
export class Person {
name: string;
surname: string;
address: string;
ui_active: boolean; // I know that those parameters are not from API
ui_fullName: string; // response but they are here to make my life easier
}
2)使用这些参数创建另一个扩展类:
export class PersonExtended extends Person {
ui_active: boolean;
ui_fullName: string
}
但是这种方法使事情变得复杂,因为我有 2 个模型,我需要一直在它们之间切换。
这种情况的最佳做法是什么?
解决方案
只需使用?
-operator 将这些字段设为可选:
export class Person {
name: string;
surname: string;
address: string;
ui_active?: boolean;
ui_fullName?: string;
}
因此,您可以使用它们,但您不必这样做。
编辑:
如果您必须在使用以下通用方法时删除它们:
private omitFields<T>(object: T, fields: Array<string>): T {
for (let field of fields) {
delete object[field];
}
return object;
}
例如,像这样使用它:
this.omitFields(el, ['ui_active', 'ui_fullName']);
推荐阅读
- python - 如何使装饰器功能成为类的一部分
- javascript - 如何将查询字符串参数从数据传递给ajax调用
- node.js - Sequelize 有条件的订单
- javascript - html5的使用针对不同的浏览器
- php - 如何将多行从文本区域插入到多列?
- android - 可空接收器类型捆绑的不安全使用?android 应用程序将在编译时出现警告但立即崩溃
- linux - 为什么这些挂载的不同目录具有相同的 inode 号?
- android - 是来自意图的非空对象吗? .extras?可以为空?
- c - 在函数中分配结构的 char** 成员
- dataframe - 使用列表并替换 pyspark 列