Страница не отображается после обновления Primeng до версии 9

После обновления моего проекта до Angular 9. Я изменил используемые компоненты из Priment с p-dataTable на p-Table, как указано в документах Primeng. К сожалению, сейчас моя страница не отображается. В HTML

<p-table [value]="popup.assignedUser.selectedList" [scrollable]="true"

эта строка говорит, что заданный пользователь не определен, но в более ранней версии со старой таблицей данных Primeng и angular 6 это работало нормально. Что мне нужно изменить, чтобы код работал так же, как и раньше, в таблице Primeng? В ts для этого html я объявил

 @ViewChild('popup', {static: false}) popup: UsersPopupComponent;

всплывающий компонент выглядит так:

  @ViewChild('userModal') userModal;
    @ViewChild('assignedUser') assignedUser: AssignedUserTableComponent;
    @ViewChild('assignUser') assignUser;
    type = globals.viewType;
    reportView = false;

    constructor(private reportsComponent: ReportsComponent) {
    }

    openModal(): void {
        this.reportView = true;
        this.userModal.nativeElement.classList.add('open-modal');
    }

    closeModal() {
        this.userModal.nativeElement.classList.remove('open-modal');
    }

    refreshTree() {
        this.assignUser.refreshTree(this.assignUser.treeSelect);

    }

    gatherData() {
        this.reportsComponent.gatherUserIds();
    }

    deleteList() {
        this.assignedUser.selectedList = [];
    }

и selectedList из заданного пользователя устанавливается в другом компоненте AssignedUserTable

 addUser(inputList) {
        if (this.typeService === this.typeInput) {
            inputList.forEach(il => (
                !this.selectedList.find(sl => sl.userId === il.userId)) ?
                this.selectedList.push(il) : {});
            this.emitUser();
            this.selectedList.forEach(user => {
                user._fullName = this.userService.getUserFullNameFromCachedUsers(user.userId);
            });
            this.selectedList.sort((a, b) =>
                a._fullName.substr(a._fullName.indexOf(' ') + 1).localeCompare(b._fullName.substr(b._fullName.indexOf(' ') + 1)));
        }
    }

person mario    schedule 16.10.2020    source источник
comment
Когда назначается назначенный пользователь? Можете ли вы опубликовать больше кода здесь?   -  person Yesub    schedule 16.10.2020
comment
Я отредактировал код, так что теперь все зависимости должны быть видны   -  person mario    schedule 16.10.2020


Ответы (1)


Попробуйте добавить вопросительный знак после назначенного пользователя в свой html. В основном вопросительный знак означает

if assignedUser !== undefined && assignedUser !== null

<p-table [value]="popup.assignedUser?.selectedList" [scrollable]="true"

Если assigneUser инициируется после представления, представление будет иметь неопределенный объект. С помощью этого трюка он будет ждать, чтобы получить значение для инициации.

person Yesub    schedule 16.10.2020
comment
хм, это немного помогло, я вижу главную страницу, но всплывающее окно компонента не инициализируется :( - person mario; 16.10.2020