Когда я привязываюсь к массиву, кажется, что он неправильно отражает разметку ngif

У меня есть @Input, которому я присваиваю значение в родительском компоненте. Я присваиваю значение из пустого массива массиву размера один.

Однако в этом компоненте он, похоже, не отражает должным образом этот измененный массив в форме NGIF. Это довольно просто, и я не думал, что мне нужно использовать сеттеры, поскольку он принимает объект как есть и т. д.

Ниже приведен явный код, который я использую для реализации

Разметка родительского элемента A

<input-datalist [buttons] = "buttons"></input-datalist>

Код родительского элемента A:

buttons: any[];
ngOnInit() { this.buttons = [ {key: "value"} ];

Компонент список входных данных Разметка:

<jqxGrid (contextMenu) = "handleContext($event)"></jqxGrid>
<jqxMenu *ngIf = "buttons && buttons.length > 0">
  <ul>
    <li *ngFor = "let btn of buttons">{{btn.key}}</li>
  </ul>
</jqxMenu>

Компонент список входных данных Код:

@Input() buttons: any[]

@ViewChild('gridMenu', { read: null, static: true }) gridMenu: jqxMenuComponent;
handleContext(event){
    let scrollTop = window.scrollY;
    let scrollLeft = window.scrollX;
    console.info("Does GridMenu Exist? ", this.gridMenu, 'Button Count: ', this.buttons)
    this.gridMenu.open(parseInt(event.clientX) + 5 + scrollLeft, parseInt(event.clientY) + 5 + scrollTop);
    event.preventDefaults()
}

Когда я это сделаю, щелчок правой кнопкой мыши вызовет контекстное меню, но в нем будет сказано: open не существует для gridMenu. Я снял ngIf, чтобы посмотреть, не в самом ли вопросе МЕНЮ, но кажется, что когда я правильно устанавливаю кнопки, он все равно думает, что он пустой, хотя, когда я подношу его с помощью консоли, он показывает массив размер один.

Есть ли что-то, что мне не хватает, когда дело доходит до настройки свойства? Это следует за любой другой реализацией, которую я видел.

Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Angular и React для вашего проекта веб-разработки?
Angular и React для вашего проекта веб-разработки?
Когда дело доходит до веб-разработки, выбор правильного front-end фреймворка имеет решающее значение. Angular и React - два самых популярных...
Эпизод 23/17: Twitter Space о будущем Angular, Tiny Conf
Эпизод 23/17: Twitter Space о будущем Angular, Tiny Conf
Мы провели Twitter Space, обсудив несколько проблем, связанных с последними дополнениями в Angular. Также прошла Angular Tiny Conf с 25 докладами.
Угловой продивер
Угловой продивер
Оригинал этой статьи на турецком языке. ChatGPT используется только для перевода на английский язык.
Мое недавнее углубление в Angular
Мое недавнее углубление в Angular
Недавно я провел некоторое время, изучая фреймворк Angular, и я хотел поделиться своим опытом со всеми вами. Как человек, который любит глубоко...
Освоение Observables и Subjects в Rxjs:
Освоение Observables и Subjects в Rxjs:
Давайте начнем с основ и постепенно перейдем к более продвинутым концепциям в RxJS в Angular
1
0
59
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

я думаю, что проблема не имеет ничего общего с входами. это вызывает из этой строки

@ViewChild('gridMenu', { read: null, static: true }) gridMenu: jqxMenuComponent;

здесь static: true заставляет ViewChild запрос не ждать оценки *ngIf. другими словами, static: true заставляет ViewChild выполняться до того, как *ngIf будет оценено (подробнее здесь, подробнее здесь). Таким образом, изменение следующим образом должно решить вашу проблему.

@ViewChild('gridMenu', { static: false }) gridMenu: jqxMenuComponent;

Интересно. Я установил для параметра static значение false, и теперь меню будет отображаться, но массив кнопок по-прежнему отображается пустым в ngForLoop.

Fallenreaper 12.07.2019 20:54

это может быть из-за того, как реализован jqxMenu. что происходит, когда вы помещаете handleContext()тело в setTimeoutподобное это

ysf 12.07.2019 21:04

setTimeout не работает, но похоже, что я читал старый API с новой версией jqxMenu. Когда я удаляю [height] = "'auto'", похоже, меню будет отображаться правильно.

Fallenreaper 12.07.2019 21:18

Другие вопросы по теме