更新:
@mhartingtonが言うように:
これは意図的に行われるため、グローバルな ion-navbar を作成する方法はありません。コンポーネントごとにナビゲーション バーを定義するポイントは、タイトル、ナビゲーション バーの背景色 (変更した場合) を適切にアニメーション化し、必要なその他のプロパティをアニメーション化できるようにすることです。
ion-navbar
そして、 html コードの重複を避けるためのカスタム ディレクティブの作成について:
それでも angular2 コンテンツ プロジェクションの動作にエラーが発生します。人々がこれを試してみると、未解決の問題がいくつかありますが、最良の答えはそれをやらないことです。
推奨されない解決策:
コードの重複を避けるために、navbar 用に独自のカスタム コンポーネントを作成できます。
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;
}
}