使用来自组件的 @Input 指令打开模态后获取对象

Get object after open modal with @Input directive from component

我想在打开 Modal 组件时获取对象并获取组件传递的值。

所以这是我在 UserComponent.ts 中打开 ModifyuserModalComponent 的方法:

  constructor(
    public dialog: MatDialog
  ) { }

  modifyUser(user: UteUser) {
    console.log(user); //this print correctlry my object
    this.dialog.open(ModifyuserModalComponent, {
      data: user
    });
  }

这是我的 ModifyuserModalComponent ts 代码:

@Component({
  selector: 'app-modifyuser-modal',
  templateUrl: './modifyuser-modal.component.html',
  styleUrls: ['./modifyuser-modal.component.scss'],
})
export class ModifyuserModalComponent implements OnInit {

  @Input() data: any;

  constructor(
    public dialogRef: MatDialogRef<ModifyuserModalComponent>
  ) { 

  }

  ngOnInit() {
    console.log("usergetted: ", this.data);
  }

  closeDialog(){
    this.dialogRef.close();
  }
}

所以我的目标是在单击打开对话框时从 UserComponent.ts 获取 data。 但是当打开 ModifyuserComponent 时,我的数据对象是 undefined。 我哪里错了?

this.dialog.open(ModifyuserModalComponent, {
  data: user
}); 

returns一个MatDialogRef,依次可以访问实例化的组件。

因此这将起作用:

const modalRef = this.dialog.open(ModifyuserModalComponent, {
  data: user
});
const modal = modalRef.componentInstance
modal.data... // your code goes here

使用服务和 Observable 共享数据

import { Injectable } from '@angular/core';
import { Observable, Subject } from 'rxjs';

@Injectable({ providedIn: 'root' })
export class MessageService {
    private subject = new Subject<any>();

    sendMessage(message: string) {
        this.subject.next({ text: message });
    }

    clearMessage() {
        this.subject.next();
    }

    getMessage(): Observable<any> {
        return this.subject.asObservable();
    }
}

在 ModifyuserModalComponent 中订阅以下方法: this.subscription = this.messageService.getMessage().subscribe(消息 => { this.message = 消息; });