更新:
就像@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
为input
,Component
您可以决定在哪些页面中显示该按钮以及在哪些页面中不可见。所以通过这种方式,你可以发送信息来告诉组件它应该是怎样的,并为每个页面定制它。
因此,如果您想在页面中添加导航栏(不修改默认模板,因此显示创建按钮),您只需添加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;
}
}