Javascript 如何在Typescript中将属性分配给类成员
我是一个Java的家伙和学习型脚本,但我遇到了这种情况 我有一门课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); } 我有一个关于角度材料的对话,在对话中
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'}