更新:
就像@mhartington 所说:
无法创建全局 ion-navbar,因为这是在
目的。为每个组件定义导航栏的意义在于
我们可以正确地为标题设置动画,导航栏背景颜色(如果
您更改它们)并为所需的其他属性设置动画。
关于创建自定义指令以避免重复ion-navbar html 代码:
这仍然会导致 angular2 内容投影的错误
作品。当人们尝试这个时,我们有几个问题已经打开
并且最好的答案是不要这样做。
不推荐的解决方案:
为了避免重复这么多代码,您可以为导航栏创建自己的自定义组件。
使用此代码创建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 声明为Component 的input,您可以决定在哪些页面中显示该按钮以及在哪些页面中不可见。所以通过这种方式,你可以发送信息来告诉组件它应该是怎样的,并为每个页面定制它。
因此,如果您想在页面中添加导航栏(不修改默认模板,因此显示创建按钮),您只需添加 navbar 元素(由我们在 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;
}
}