如何创建多模态方法Javascript?
我试着创造一些 如何编写UpdatesPDATA方法, 如果获取类型为stepOneData的数据,则会更改stepOneData 如果获取类型为stepOneData的数据,是否会更改stepTwoData如何创建多模态方法Javascript?,javascript,angular,typescript,Javascript,Angular,Typescript,我试着创造一些 如何编写UpdatesPDATA方法, 如果获取类型为stepOneData的数据,则会更改stepOneData 如果获取类型为stepOneData的数据,是否会更改stepTwoData updateStepData(data: StepOneData | StepTwoData): void { Object.keys(data).map(key => { // if (data instanceof StepOneData) {
updateStepData(data: StepOneData | StepTwoData): void {
Object.keys(data).map(key => {
// if (data instanceof StepOneData) {
this.stepOneData[key] = data[key];
// }
// if (data instanceof StepTwoData) {
this.stepTwoData[key] = data[key];
// }
});
}
我已尝试使用instanceof运算符,但在这里它不起作用。我在Step1组件中找到了此方法:
onFormChanges(): void {
this.stepOneForm.valueChanges
.subscribe((data: StepOneData) => {
this.registrationService.updateStepData(data);
});
}
更改如下:
onFormChanges(): void {
this.stepOneForm.valueChanges
.subscribe((data: StepOneData) => {
const stepOneData = new StepOneData();
stepOneData.firstName = data.firstName;
stepOneData.firstName = data.lastName;
this.registrationService.updateStepData(stepOneData);
});
}
export class StepTwoData {
constructor(public city:string,public state:string){}
}
对Step2组件执行相同的操作
现在,您可以使用您在代码中编写的instanceof:
if (data instanceof StepOneData) {
this.stepOneData[key] = data[key];
}
if (data instanceof StepTwoData) {
this.stepTwoData[key] = data[key];
}
=========================================
要生成可读代码,您可以向StepOneData和StepTwoData类中添加constrcutor以初始化其属性,如下所示:
onFormChanges(): void {
this.stepOneForm.valueChanges
.subscribe((data: StepOneData) => {
const stepOneData = new StepOneData();
stepOneData.firstName = data.firstName;
stepOneData.firstName = data.lastName;
this.registrationService.updateStepData(stepOneData);
});
}
export class StepTwoData {
constructor(public city:string,public state:string){}
}
在您的组件中:
onFormChanges(): void {
this.stepTwoForm.valueChanges
.subscribe((data: StepTwoData) => {
const stepTwoData= new StepTwoData(data.city,data.state);
this.registrationService.updateStepData(stepTwoData);
});
}
==========================
更新:
为了更好的设计,我建议你为每种类型写两种方法。例如“UpdatesPoneData”和“UpdateStepTwoData”
如果这些方法中存在共享逻辑,则将其放入名为“UpdatesEdata”的方法中
关键变量来自哪里?如果你说它不工作,什么不工作,你期望什么行为?它应该工作,请发布你函数的输入。我使用
data.constructor.name
检查了类型,你的类型就是Object。因此,您在行的某个位置传递了错误的类型。sence in data变量。我在subscribe:stepForm.valueChanges.subscribe(数据=>{this.updatestpdata(数据)})中得到它。在那个地方,我可以创建新的StepOneData(),并手动将数据中的值复制到这个新对象,这样InAsceof就可以工作了。这是我的决定。但我们如何自动管理subcribe()中数据变量的类型很有趣。很酷,谢谢@Soroush_Neshat。这正是我想要的。你如何@Soroush_Neshat认为,最好使用两种方法:第一种是UpdateSp1Data(),第二种是UpdateSp2Data(),而不是univesal UpdateSpData()?。哪一种方法更有效?或者我可以使用第二个参数创建UpdatesPDATA(),当调用此方法时,通过步骤=1或步骤=2。。。然后在方法中使用它。有一个更好的解决方案。目前我在公共汽车和铁路超高类型代码。我回家后会分享:)@ValeryLutsevich抱歉,我完全忘了分享我的解决方案。我很抱歉。我在上面的答案中添加了解决方案