如何以编程方式将项添加到nativescript actionbar?

如何以编程方式将项添加到nativescript actionbar?,nativescript,Nativescript,如何以编程方式将项目添加到ActionBar?我一直在尝试使用下面的代码,但操作项从未更新 public setActionBarItems(actionBar: ActionBar) { let tab = TabFactory.getTab(this.currentTabIndex); let actionItem = new ActionItem(); actionItem.set("ios.systemIcon", "12");

如何以编程方式将项目添加到ActionBar?我一直在尝试使用下面的代码,但操作项从未更新

public setActionBarItems(actionBar: ActionBar) {
        let tab = TabFactory.getTab(this.currentTabIndex);
        let actionItem = new ActionItem();
        actionItem.set("ios.systemIcon", "12");
        actionItem.set("ios.position", "right");
        actionItem.set("android.systemIcon", "ic_menu_search");
        actionItem.set("android.position", "right");
        actionBar.actionItems.addItem(actionItem);

        // for (let actionItem of tab.actionItems) {
        //     actionBar.actionItems.addItem(actionItem);
        // }
    }

我是否需要告诉视图以某种方式更新自身?我还尝试在ActionBar本身上设置actionItems={{actionBarItems}},但这会引发一个警告,说明该属性是只读的。

现在对此并不自豪,但这里有一个可能的解决方案。将来可能会重构它

视图模型

export class MainViewModel extends Observable {
    public isArticlesListTabVisible : boolean;
    public isArchiveTabVisible : boolean;
    public isAccountTabVisible : boolean;

    public items: Array<BottomBarItem> = [
        new BottomBarItem(0, "Archive", "ic_archive_black", "#FF303030"),
        new BottomBarItem(1, "My List", "ic_list_black", "#FF303030"),
        new BottomBarItem(2, "Account", "ic_account_circle_black", "#FF303030")
    ];

    constructor() {
        super();
    }

    get title() : string {
        return "My List";
    }

    public setActionBarTitle(tab: ITab) {
        this.notifyPropertyChange("title", tab.title);
    }

    public setActionBarItems(currentTab: ITab) {
        if (currentTab instanceof ArticlesListTab) {
            this.isArticlesListTabVisible = true;
            this.isAccountTabVisible = false;
            this.isArchiveTabVisible = false;
        }
        else if (currentTab instanceof AccountTab) {
            this.isAccountTabVisible = true;
            this.isArticlesListTabVisible = false;
            this.isArchiveTabVisible = false;
        }
        else {
            this.isArchiveTabVisible = true;
            this.isArticlesListTabVisible = false;
            this.isAccountTabVisible = false;
        }

        this.notifyPropertyChange("isArticlesTabVisible", this.isArticlesListTabVisible);
        this.notifyPropertyChange("isAccountTabVisible", this.isAccountTabVisible);
        this.notifyPropertyChange("isArchiveTabVisible", this.isArchiveTabVisible);
    }
}

你是否尝试过在默认情况下添加它们,但可见性设置为崩溃,然后用程序逻辑控制它。是的,这就是我昨晚睡觉前要做的。这应该行得通:P我会在这里发布我的代码。但如果有人知道更好的方法,请放心
<ActionBar title="{{ title }}" class="action-bar" id="mainActionBar">
            <ActionItem tap="{{onSearch}}" 
                ios.systemIcon="12" ios.position="right"
                android.systemIcon="ic_menu_search" android.position="right" visibility="{{isArticlesListTabVisible ? 'visible' : 'collapsed'}}"/>
            <ActionItem tap="{{onArticlesFilter}}"
                ios.systemIcon="10" ios.position="right"
                android.systemIcon="ic_menu_sort_by_size" android.position="popup" text="Newest" visibility="{{isArticlesListTabVisible ? 'visible' : 'collapsed'}}"/> 
            <ActionItem tap="{{onArticlesFilter}}"
                ios.systemIcon="10" ios.position="right"
                android.systemIcon="ic_menu_sort_by_size" android.position="popup" text="Oldest" visibility="{{isArticlesListTabVisible ? 'visible' : 'collapsed'}}"/>    
            <ActionItem tap="{{onArticlesFilter}}"
                ios.systemIcon="10" ios.position="right"
                android.systemIcon="ic_menu_sort_by_size" android.position="popup" text="Most Progress" visibility="{{isArticlesListTabVisible ? 'visible' : 'collapsed'}}"/> 
            <ActionItem tap="{{onArticlesFilter}}"
                ios.systemIcon="10" ios.position="right"
                android.systemIcon="ic_menu_sort_by_size" android.position="popup" text="Least Progress" visibility="{{isArticlesListTabVisible ? 'visible' : 'collapsed'}}"/> 
        </ActionBar>
export function onBottomBarLoaded(args: EventData) {
    this._bottomBar = args.object as BottomBar;
    this._bottomBar.selectItem(1);

    this._bottomBar.on('tabSelected', (args) => {
        switchBottomBarTab(args.newIndex, args.oldIndex);
        let currentTab = TabFactory.getTab(args.newIndex);

        _model.setActionBarTitle(currentTab);
        _model.setActionBarItems(currentTab);
    });
}