У меня есть ActionItem:
<ActionItem #finishActionItem text = "Finish" ios.position = "right" android.position = "actionBar" (tap) = "handleFinish()"></ActionItem>
Как отключить/включить actionItem? Я знаю, что это очень легко сделать изначально, но не могу понять, как это сделать в NativeScript angular.
Я пробовал использовать actionView, но actionView работает только с некоторым типом представления внутри actionItem. Мне не нужна метка внутри actionItem, потому что это требует, чтобы я сам ее стилизовал.
Как решить проблему?





NativeScript этого не поддерживает, но вы можете сделать это с помощью небольшого количества нативного кода.
Вставить Page в конструктор
import { Page } from "tns-core-modules/ui/page";
...
constructor(private page: Page) { }
Чтобы отключить finishActionItem в вашем коде,
if (this.page.actionBar.android) {
const menu = this.page.actionBar.nativeView.getMenu();
menu.findItem(this.finishActionItem.nativeElement._getItemId()).setEnabled(false);
} else {
const navigationItem = this.page.ios.navigationItem,
barButtonItems = this.finishActionItem.nativeElement.ios.position === "left" ? navigationItem.leftBarButtonItems : navigationItem.rightBarButtonItems;
let barButtonItem;
for (const item of barButtonItems) {
if (item.accessibilityLabel === this.finishActionItem.nativeElement.text) {
barButtonItem = item;
break;
}
}
if (barButtonItem) {
barButtonItem.enabled = false;
}
}
Мне пришлось изменить часть ios на: const barButtonItem = this.page.ios.navigationItem.rightBarButtonItem; если (barButtonItem) { barButtonItem.enabled = включено; }
Я борюсь с той же проблемой. Я использую Nativescript/Angular и пытался реализовать вышеуказанное решение, однако код не может найти this.finishActionItem. Я вижу, что это идентификатор (#finishActionItem) элемента действия, но получаю красную волнистую линию и ошибку компиляции. Есть ли в этом решении что-то, что не показано выше? Мой ActionBar находится в моем app.component.html, поэтому он автоматически отображается на всех страницах для удобства и предотвращения избыточного кода. Но это отображается на моей целевой странице, и я пытаюсь скрыть некоторые узлы ActionItem только с целевой страницы.
Сборка Webpack завершена! Проект успешно подготовлен (Android) tns-java-classes.js успешно перенесен на эмулятор устройства-5554. Успешно передан файл vendor.js на эмуляторе устройства-5554. Перезапуск приложения на эмуляторе устройства-5554... Успешно синхронизировано приложение org.nativescript.blankng на эмуляторе устройства-5554. JS: HMR: включена горячая замена модуля. Ожидание сигнала. JS: ОШИБКА TypeError: Не удается прочитать свойство «getMenu» неопределенного. Похоже, мне может не хватать библиотеки для объекта actionBar.nativeView? this.page.actionBar.nativeView.getMenu();
Забыл добавить, что у меня есть код в моем методе ngOnInit() : void { ... }, и он находится в компоненте посадочного представления, а не в app.component.ts. В ответе выше не указано, куда поместить код.
Ваши нативные элементы не будут готовы в ngOnInit. Рекомендуется использовать загруженные события View, чтобы обеспечить готовность собственных элементов.
@Manoj - Пробовал с ngAfterViewInit() : void {} и некоторыми другими, все та же ошибка. Возможно, мне придется прибегнуть к другому методу все вместе, потратил почти весь день на этот уже. Спасибо за вашу поддержку.
Как я уже упоминал, используйте загруженное событие в корневом представлении или на странице.
Именно то, что я искал! Большое спасибо!