angular - 在 angular5 中发送基于选定用户的表单数据
问题描述
我对多种类型的用户数据使用通用的反应形式。就像一些用户有额外的数据,比如老师、学生、警卫等。从下拉列表中选择表格
我想根据选定的用户发送特定的数据对象。我创建了一个名为“用户”的模型,其中包含所有常见和差异字段。现在我想发送如下数据
selectedUser:string; //form selected like teacher etc
submit(data){
if(selectedUser === 'Teacher'){
let techobj =new User(data.name,data.address,data.degree);
this.userservice.post(url,teachobj);
}
if(selectedUser === 'Student'){
let stuobj =new User(data.name,data.address,data.semester);
this.userservice.post(url,stuobj);
}
..... so on
}
模型类
export class User{
//all fields here
constructor(name :string,address:string,semester ?:string ,degree?:string)
}
问题 无法重载构造函数或使用 Java 或 C# 等差异参数创建对象
解决方案
您可以创建一个具有强制和可选属性的接口,在特殊情况下需要传递这些属性,如下所示
export interface IUser{
name: string;
address: string;
semester?: string,
degree?: string
}
此处姓名,地址是每个案例的必填项,但学期和学位可以根据条件通过。
您可以在User
类的构造函数中使用此接口,如下所示来设置属性的值。
export class User{
//all fields here
public name: string;
public address: string;
public semester?: string;
public degree?: string;
constructor(user:IUser) {
this.name = user.name;
this.address = user.address;
this.semester = user.semester;
this.degree = user.degree;
}
}
最后,您可以像以下方法一样创建类的实例 -
let data2:IUser = { name: data.name, address: data.address, degree: data.degree};
let techobj = new User(data2);
或者你可以这样做
let techobj2 = new User({ name: data.name, address: data.address, degree: data.degree});
同样,Student
您可以像这样创建实例 -
let techobj3 = new User({ name: data.name, address: data.address, semester:data.semester });
这是完整的代码 -
export interface IUser{
name: string;
address: string;
semester?: string,
degree?: string
}
export class User{
//all fields here
public name: string;
public address: string;
public semester?: string;
public degree?: string;
constructor(user:IUser) {
this.name = user.name;
this.address = user.address;
this.semester = user.semester;
this.degree = user.degree;
}
}
let data:IUser = { name: "Niladri", address: "123", degree: "GRAD" };
let techobj = new User(data);
///OR
let techobj2 = new User({ name: "Niladri", address: "123", degree: "GRAD" });
//Similary
let techobj3 = new User({ name: "Niladri", address: "123", semester:"6th" });
console.log(techobj2.degree); //GRAD
console.log(techobj3.semester); //6th
你的服务电话应该是这样的 -
selectedUser:string; //form selected like teacher etc
submit(data){
if(selectedUser === 'Teacher'){
let techobj =new User({ name: data.name, address: data.address, degree: data.degree});
this.userservice.post(url,teachobj);
}
if(selectedUser === 'Student'){
let stuobj =new User({ name: data.name, address: data.address, semester:data.semester });
this.userservice.post(url,stuobj);
}
..... so on
}
PS - 如果您在当前构造函数中为不需要的参数传递 null ,那么它也可以工作
编辑2:另一种方法是创建一个基类User
并从该类继承创建Student
和Teacher
类,然后调用super()
子类的构造函数将name,address
属性值传递给基User
类。但是这种情况下会有很多子类取决于 if 条件的数量
工作演示:
推荐阅读
- prometheus - 如何配置 Grafana 以捕捉 Prometheus 指标的急剧下降?
- php - 传递给 App\Http\Controllers\UsoSueloController::store() 的参数 1 必须是 Illuminate\Http\Request 的实例,给定字符串
- r - 尝试制作分组条形图并继续收到“-0.01 * 高度错误:二进制运算符的非数字参数”
- json - 在 listView QML 中使用嵌套 JSON 作为 section.property
- python - 加入三个表并专门对 pandas 中的列进行排序
- java - 如何在特定时间自动启用/禁用推送通知
- microsoft-graph-api - 订阅未返回 201 Created HTTP 状态码
- angular - 如何在rxjs中使用循环中的两个可观察函数?
- c# - 如何在 .NET Core 中执行多个任务,并检查哪些任务成功完成
- typescript - 是否可以在 Ionic 中“切片”模态?