Javascript 如何在Typescript中将属性分配给类成员

Javascript 如何在Typescript中将属性分配给类成员,javascript,angular,typescript,angular8,Javascript,Angular,Typescript,Angular8,我是一个Java的家伙和学习型脚本,但我遇到了这种情况 我有一门课 export class Human{ public name: string; public surname: string; public status:ApprovalStatus(Its an Enum); constructor( human: Human) { Object.assign(this, human); } 我有一个关于角度材料的对话,在对话中

我是一个Java的家伙和学习型脚本,但我遇到了这种情况

我有一门课

export class Human{

    public name: string;
    public surname: string;
    public status:ApprovalStatus(Its an Enum);
  
    constructor( human: Human) {
      Object.assign(this, human);
    }
我有一个关于角度材料的对话,在对话中我传递了这个对象,其中填充了值,例如name='ABC'和姓氏='PQR',status=ApprovalStatus.NOT_APPROVED

“角度材质”对话框是一个单独的组件,其中构造函数类似于

openDialog() {
    const dialogRef = this.dialog.open(DialogComponent,{
    data:{human:this.human},
    disableClose: true });

    dialogRef.afterClosed().subscribe(result => {
      console.log(result)
    });
  }
这就是调用对话的方式,我将收到返回的数据

constructor(@Inject(MAT_DIALOG_DATA) public human: any,private dialogRef: MatDialogRef<DialogComponent>) {}
constructor(@Inject(MAT_DIALOG_DATA)public-human:any,private-dialogRef:MatDialogRef){}
因此,我将在human中接收数据,现在我想通过修改对象human-like将数据发回,以设置不同于ApprovalStatus.NOT_APPROVED to ApprovalStatus.APPROVED

所以我现在做的基本上是

public confirm() {
    let humanData=<Human>this.human;
    human.status=ApprovalStatus.APPROVED;
    this.dialogRef.close({ data: humanData}) // send data to parent component
  }
public confirm(){
让humanData=this.human;
human.status=ApprovalStatus.APPROVED;
this.dialogRef.close({data:humanData})//将数据发送到父组件
}

因此,在另一个组件上,我分别收到两件事情,一件是状态,另一件是人类对象,它没有被修改为已批准状态,即使在confirm()中也没有方法是否有人指出如何处理此问题?

在构造函数中键入
human:any
,然后断言它是组件中的
是否有原因

我会更新你的构造函数,使其正确键入

constructor(@Inject(MAT_DIALOG_DATA)public-human:human,private-dialogRef:MatDialogRef){}
我认为您的代码也会出错,因为您正在为
human.status
分配一个不应该定义的值

public confirm(){
//这条线是不需要的,你已经有了这个.human,它不会指向内存中的同一个对象
//让humanData=this.human;
//人类甚至没有定义,所以这是行不通的
//human.status=ApprovalStatus.APPROVED;
//这次我们将在真实对象上设置属性
this.human.status=ApprovalStatus.APPROVED;
//这应该有正确的数据
log('human in the dialog',this.human);
//把这个还给我
this.dialogRef.close({data:this.human})//将数据发送到父组件
}

对象传递到对话框时出错,应该是:

openDialog() {
    const dialogRef = this.dialog.open(DialogComponent,{
        data: this.human,
        disableClose: true
    });

    dialogRef.afterClosed().subscribe(result => {
        console.log(result)
    });
}
所以
data:{human:this.human}
应该是
data:this.human

在对话框中,数据是
{human:this.human}
。 所以

将数据设置为:

{human: this.human, status: 'xxx'}

Hi@cjd82187我尝试过这种方法,但是当我使用console.log(this.human)时,它仍然会打印旧的状态);我不知道Mat dialog在做什么,也不知道你是如何取回数据的,所以我不能对此发表评论。在对象上设置属性
someObject.someProperty=someValue
是正确的。我在确认方法中添加了一个控制台日志,人类应该具有您添加的新状态。我刚刚更新了问题,我刚刚看到了这种Wiered行为,发布的原因仅是…);如果没有一个有效的stackblitz或类似的东西,我真的无法调试它。我快速查看了文档,您作为参数传递给
dialogRef.close()
方法的任何内容都应该是订阅中返回的内容。是的,这是真的,但我作为json传递是我的错误。。。!!请记住,虽然TypeScript在编码和编译期间为您提供了一些类型,但在运行时它的JavaScript没有类型。如果您没有得到预期的结果,请尝试记录数据,并确保它确实是您所认为的。我理解我的错误,我的工作已经完成,但您能详细说明两者之间的区别吗?我理解我将对象作为json对象而不是类对象传递,这是我没有错的唯一原因。。!!
{human: this.human, status: 'xxx'}