Как передать данные в NG2-Smart-таблицы renderComponent из HTTP-запроса? - PullRequest
0 голосов
/ 29 октября 2019

У меня есть таблица с пользовательским компонентом в ячейке и сервис, который предоставляет мне некоторые данные для отображения. Мой пользовательский компонент реализует выбор. Итак, столбец таблицы выглядит так:

userRole: {
title: 'User Role,
type: 'custom',
renderComponent: SelectComponent,
onComponentInitFunction: (instance) => {
instance.selectEdit
.subscribe( (data) => {
console.log(data);
});
}
  },

select.component.html:

<select #select
        (change)="callType(select.value)"
>
  <option *ngFor="let option of options"
          attr.value="option.id" >{{option.name}}</option>
</select>

select.component.ts:

export class SelectComponent implements OnInit, OnChanges, ViewCell {
@Input() value: string | number;
@Input() rowData: any;
@Input() options;
@Output() selectEdit = new EventEmitter();

constructor() {
}

ngOnInit() {
}

ngOnChanges(changes: SimpleChanges): void {

}

callType(event) {
this.selectEdit.emit(event);
}

  }

Похоже instance объект должен иметь свойство options (потому что он под @Input), но это не так :( Я пробовал что-то вроде https://github.com/akveo/ng2-smart-table/issues/521#issuecomment-333273103, но он не работает для меня, потому что мне нужны данные изНаблюдаемое.

1 Ответ

0 голосов
/ 30 октября 2019

хитрое решение: подготовить данные для SelectComponent перед рендерингом компонента с таблицей. container.component.ts:

  ngOnInit() {
    this.userService.httpAllRoles()
      .subscribe((roles: Role[]) => {
        this.roles = roles;
      });
  }

container.component.html:

<div *ngIf="roles">
  <app-table [roles]="roles"></app-table>
</div>

, а затем передача данных во внутренний компонент через valuePrepareFunction table.component.ts:

      userRole: {
        title: 'userRole,
        filter: false,
        type: 'custom',
        valuePrepareFunction: (value, row, cell) => {
          // DATA FROM HERE GOES TO renderComponent
          return this.roles;
        },
        renderComponent: SelectComponent,
        onComponentInitFunction: (instance) => {
          instance.selectEdit
            .subscribe( (data) => {
              console.log(data);
            });
        }
      },

для получения данных в SelectComponent:

export class SelectComponent implements OnInit, ViewCell {
  @Input() value; // data from table
  @Input() rowData;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...