Как назначить свойство членам класса в машинописном тексте - PullRequest
0 голосов
/ 10 июля 2020

Я Java Скрипт парня и обучающегося типа Но я столкнулся с такой ситуацией ... !!

У меня есть класс типа

export class Human{

    public name: string;
    public surname: string;
    public status:ApprovalStatus(Its an Enum);
  
    constructor( human: Human) {
      Object.assign(this, human);
    }

У меня диалог Angular Материал, в который я передаю this Object Human со значениями, заполненными, например, как name = 'AB C' и surname = 'PQR' и status = ApprovalStatus.NOT_APPROVED

Диалог материалов Angular это отдельный компонент, где конструктор похож на

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>) {}

Итак, я получу данные в человек , и теперь я хочу отправить обратно данные, изменив объект, человек хотел бы установить другой статус от ApprovalStatus.NOT_APPROVED до ApprovalStatus.APPROVED

так что в основном то, что я делаю, это

public confirm() {
    let humanData=<Human>this.human;
    human.status=ApprovalStatus.APPROVED;
    this.dialogRef.close({ data: humanData}) // send data to parent component
  }

Итак, по другому компоненту я получаю две вещи по отдельности: один - это статус , а другой - человеческий объект , который не изменяется в статус УТВЕРЖДЕН даже в подтверждении ( ) метод, укажите, как с этим бороться?

Ответы [ 2 ]

1 голос
/ 10 июля 2020

Ошибка при передаче объекта 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}. поэтому

this.human.status = `xxx`

сделает данные как:

{human: this.human, status: 'xxx'}
0 голосов
/ 10 июля 2020

Есть ли причина в вашем конструкторе, что вы набираете human: any, а затем утверждаете, что это <Human> в вашем компоненте?

Я бы обновил ваш конструктор, чтобы он был набран правильно

constructor(@Inject(MAT_DIALOG_DATA) public human: Human,private dialogRef: MatDialogRef<DialogComponent>) {}

Я бы подумал, что код тоже будет ошибкой, так как вы присваиваете значение human.status, которое не должно определяться.

public confirm() {
    // this line was not needed, you already have this.human and its not going point to the same object in memory anyway
    //let humanData=<Human>this.human;

    // human is not even defined, so this wont work
    //human.status=ApprovalStatus.APPROVED;

    // we will set the property on the real object this time
    this.human.status = ApprovalStatus.APPROVED;

    // this should have the right data
    console.log('human inside the dialog', this.human);

    // return this.human
    this.dialogRef.close({ data: this.human}) // send data to parent component
  }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...