如何将数据传递给自定义组件的标记?

How to pass data to the markup of a custom component?

我有一个允许编辑用户的自定义组件。它显示一个对话框,可以为现有用户提供该对话框。或不。它有标记:

<button mat-button (click)="openUserDialog()">Edit</button>

和控制器:

@Component({
  selector: 'app-user-edit',
  templateUrl: './user-edit.component.html',
})
export class UserEditComponent implements OnChanges {

  @Input() existingUser: User;
  @Output() userEditedEvent: EventEmitter<User> = new EventEmitter<User>();

  userDialogRef: MatDialogRef<UserDialogComponent>;

  constructor(
    private matDialog: MatDialog,
    private userService: UserService
  ) { }

  ngOnChanges() {
  }

  openUserDialog() {
    this.userDialogRef = this.matDialog.open(UserDialogComponent, {
      hasBackdrop: false,
      data: {
        user: this.existingUser
      }
    });

    this.userDialogRef
      .afterClosed()
      .subscribe(user => {
        // TODO validate the edited user
        if (user) {
          if (this.existingUser) {
            user.id = this.existingUser.id;
            this.userService.fullUpdate(user)
              .subscribe(updatedUser => {
                this.userEditedEvent.emit(updatedUser);
                // TODO Add a hint that the user has been added
              });
          } else {
            this.userService.add(user)
              .subscribe(addedUser => {
                this.userEditedEvent.emit(addedUser);
                // TODO Add a hint that the user has been updated
              });
          }
        }
      });
  }

}

然后在用户列表页面中使用该组件,一旦在列表顶部添加新用户,标记为:

<app-user-edit (userEditedEvent)="refreshList($event)"></app-user-edit>

并在列表的每一行上使用标记编辑用户:

<app-user-edit [existingUser]="user" (userEditedEvent)="refreshList($event)"></app-user-edit>

问题是视图显示编辑标签来添加和编辑用户。

如何在列表顶部添加自定义标签,并为每个用户添加另一个更新标签?

我觉得我可能过度设计了整件事。

您可以添加另一个@Input 参数,例如label 并从标记中传递标签的值。

export class UserEditComponent implements OnChanges {

  @Input() existingUser: User;
  @Input() label: string = "Edit" // set default to EDIT. If preferred can initialised to empty.

标记为添加:

<app-user-edit (userEditedEvent)="refreshList($event)" label="ADD"></app-user-edit>

标记以进行编辑:

<app-user-edit [existingUser]="user" (userEditedEvent)="refreshList($event)" label="EDIT"></app-user-edit>

另外,在视图中需要显示的地方绑定参数标签。