angular - Ionic 2 - 应用程序的全局导航栏

标签 angular typescript ionic-framework ionic2 ionic3

在 Ionic 1 中,我们可以定义一个 <ion-nav-bar><ion-nav-view>之上,它作为整个应用程序的通用导航栏,我们可以在每个 View 的基础上将其关闭(使用 ionNavViewhideNavBar=true|false

它出现在 Ionic 2 中我们必须插入一个 <ion-nav-bar>每页 - 并且不能为整个应用程序设置全局导航栏。这是正确的,还是我错过了一个技巧?

如果是这样 - 似乎有很多重复代码?

此外,您似乎没有能力让 NavBar 构建自己的后退按钮,您必须自己(每页)为后退按钮编写自己的标记,这又一次看起来很多代码重复。

最佳答案

更新:

就像@mhartington 说的那样:

There is no way to create a global ion-navbar, as this is done on purpose. The point of having a navbar defined for each component is so that we can properly animate the titles, navbar background color (if you change them) and animate other properties needed.

关于创建自定义指令以避免重复 ion-navbar html 代码:

That will still creat errors with how angular2 content projection works. We have several issues that have been open when people try this and the best answer is to not do it.


不推荐的解决方案:

为了避免重复这么多代码,您可以为导航栏创建自己的自定义组件。

使用以下代码创建一个 navbar.html:

<ion-navbar *navbar>
  <ion-title>MyApp</ion-title>
  <button  menuToggle="right" end>
    <ion-icon name="menu"></ion-icon>
  </button>

  <ion-buttons *ngIf="!hideCreateButton" end>
    <button (click)="createNew()"><ion-icon name="add"></ion-icon></button>
  </ion-buttons>
</ion-navbar>

然后在 navbar.ts 中:

import {Component, Input} from '@angular/core';
import {NavController} from 'ionic-angular';
import {CreateNewPage} from '../../pages/create-new/create-new';

@Component({
    selector: 'navbar',
    templateUrl: 'build/components/navbar/navbar.html',
    inputs: ['hideCreateButton']
})
export class CustomNavbar {

    public hideCreateButton: string;

    constructor(private nav: NavController) {
    }

    createNew(): void {
        this.nav.setRoot(CreateNewPage, {}, { animate: true, direction: 'forward' });
    }
}

通过将 hideCreateButton 声明为 Componentinput,您可以决定在哪些页面显示该按钮,哪些不应该可见。所以通过这种方式,你可以发送信息来告诉组件它应该如何,并为每个页面定制它。

所以如果你想在页面中添加导航栏(不修改默认模板,所以显示创建按钮)你只需要添加 navbar 元素(由我们绑定(bind)到我们的自定义组件在 selector 属性中):

<navbar></navbar>

<ion-content>
  ...
</ion-content>

如果你想隐藏创建按钮(或修改你想要的导航栏),你的页面将如下所示:

<navbar [hideCreateButton]="hidebutton()"></navbar>

<ion-content>
   ...
</ion-content>

请记住,hideButton() 应该像这样在您的 customPage.ts 中定义:

import {Component} from '@angular/core';
import {NavController} from 'ionic-angular';
import {FORM_DIRECTIVES, FormBuilder, ControlGroup, Validators, AbstractControl } from '@angular/common';

@Component({
  templateUrl: 'build/pages/create-new/create-new.html',
  directives: [FORM_DIRECTIVES]
})
export class CreateNewPage{

    private hideCreateButton: boolean = true;

    public hidebutton(): boolean {
        return this.hideCreateButton;
    }
}

关于angular - Ionic 2 - 应用程序的全局导航栏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35936198/

相关文章:

javascript - 当互联网关闭时启用离线功能

ANGULAR 4 路由问题 : No provider for HttpClient

c# - 如何使用 signalr 将 json 对象发送到 .net 服务器

cordova - 如何将 CCAvenue 集成到 Ionic 应用程序?

javascript - 添加到 Angular 列表功能

javascript - 如何禁用单个 Monaco 编辑器语法规则

javascript - 访问 Angular2 模板中的特定数组元素

Angular Reactive Forms - 实现输入组件包装器的最佳方式?

angular - 如何将 HTML 的属性输入到 typescript 中

reactjs - 如何在 Typescript 2.8 中使用 Flux Container.create