OnsNavigator Directive (ons-navigator)

<ons-navigator>要素のAngularディレクティブです。

実例

OnsNavigatorディレクティブ

Angular 2バインディング下では、<ons-navigator>要素にはOnsNavigatorディレクティブが適用されます。OnsNavigatorディレクティブは、Angular 2のコンポーネントを読み込めるように<ons-navigator>を拡張します。

<ons-navigator>要素でAngular 2のコンポーネントを読み込むには、次のように[page]バインディングを用います。

@Component({
  selector: 'ons-page',
  template: `
    <ons-toolbar>
      <div class="center">Page</div>
    </ons-toolbar>
    <div class="content">
      ...
    </div>
  `
})
class DefaultPageComponent { }

@Component({
  selector: 'app',
  template: `
  <ons-navigator [page]="page"></ons-navigator>
  `
})
class AppComponent {
  page = DefaultPageComponent
}

<ons-navigator>内に読み込むコンポーネントのselectorには必ずons-pageを指定してください。この例では、DefaultPageComponentのselectorはons-pageです。

コンポーネントから<ons-navigator>を参照する

テンプレート内に<ons-navigator>がある場合には、ViewChildデコレータを使ってOnsNavigatorオブジェクトを代入することができます。OnsNavigatorオブジェクトのelementプロパティには

@Component({
  selector: 'app',
  template: `
  <ons-navigator [page]="page"></ons-navigator>
  `
})
class AppComponent {
  page = DefaultPageComponent

  @ViewChild(OnsNavigator) navigator;

  doSomething() {
    this.navigator.element.pushPage();
  }
}

ページからOnsNavigatorを参照する

<ons-navigator>要素内で読み込まれたページのコンポーネントが<ons-navigator>を参照するには、ViewChild()デコレータは使わずに代わりにDIを使います。

具体的には、ページのコンポーネントのコンストラクタの引数にOnsNavigatorを宣言すると、それが代入されます。

@Component({
  selector: 'ons-page',
  template: `
    <ons-toolbar>
      <div class="center">Page</div>
    </ons-toolbar>
    <div class="content">...</div>
  `
})
class PageComponent {
  constructor(navigator: OnsNavigator, private _params: Params) {
    console.log(navigator);
  }
}

pushPage()する

Angular2以下ではpushPage()の引数にはページのURLではなくコンポーネントのクラスを指定することができます。

navigatorElement.pushPage(PageComponent);

pushPage()する際にデータを受け渡しする

pushPage()の第二引数のdataオプションには、読み込むページンポーネントに渡すデータを指定することができます。

const data = {foo: 'bar'};
navigatorElement.pushPage(PageComponent, {data: data});
@Component({
  selector: 'ons-page',
  template: `
    <ons-toolbar>
      <div class="center">Page</div>
    </ons-toolbar>
    <div class="content">...</div>
  `
})
class PageComponent {
  constructor(navigator: OnsNavigator, params: Params) {
    console.log(params.data); // {foo: 'bar'}が表示される
  }
}

動的に読み込むコンポーネント

Angular 2アプリケーションでは、読み込まれるコンポーネントをあらかじめリストにする必要があります。<ons-navigator>要素に読み込まれるページコンポーネントを、NgModuledeclarationsオプションとentryComponentsオプションに追加することを忘れないでください。

@NgModule({
  imports: [OnsenModule],
  declarations: [AppComponent, DefaultPageComponent, PageComponent],
  entryComponents: [DefaultPageComponent, PageComponent],
  bootstrap: [AppComponent],
  schemas: [CUSTOM_ELEMENTS_SCHEMA]
})
class AppModule { }

もしこれを忘れると、コンポーネントの読み込み時にエラーを出すことになります。

詳細は、Angular 2のAngular Modules - NgModuleを参照して下さい。

関連情報

属性

名前 型 / デフォルト値 概要
page String ナビゲーターが初期化された時に表示するページを指定します。 Optional. 初期化時のみ有効
swipeable Boolean Enable iOS “swipe to pop” feature. (翻訳中) Optional.
swipe-target-width String
20px
スワイプの判定領域をピクセル単位で指定します。画面の端から指定した距離に達するとページが表示されます。 Optional.
swipe-threshold Number
0.2
Specify how much the page needs to be swiped before popping. A value between 0 and 1. (翻訳中) Optional.
animation String
default

Animation name. Available animations are "slide", "lift", "fade" and "none". These are platform based animations. For fixed animations, add "-ios" or "-md" suffix to the animation name. E.g. "lift-ios", "lift-md". Defaults values are "slide-ios" and "fade-md" depending on the platform.

(翻訳中)
Optional.
animation-options Expression アニメーション時のduration, timing, delayをオブジェクトリテラルで指定します。e.g. {duration: 0.2, delay: 1, timing: 'ease-in'} Optional.

プロパティ概要

名前 概要
pageLoader PageLoaderインスタンスを格納しています。
page 初期化時に読み込むページを指定します。page属性で指定した値よりもpageプロパティに指定した値を優先します。
onDeviceBackButton バックボタンハンドラ。
topPage 現在のページを取得します。pushPage()やresetToPage()メソッドの引数を取得できます。
pages Copy of the navigator’s page stack. (翻訳中)
onSwipe Hook called whenever the user slides the navigator (swipe-to-pop). It gets a decimal ratio (0-1) and an animationOptions object as arguments. (翻訳中)
options Default options object. Attributes have priority over this property. (翻訳中)
options.animation

Animation name. Available animations are "slide", "lift", "fade" and "none". These are platform based animations. For fixed animations, add "-ios" or "-md" suffix to the animation name. E.g. "lift-ios", "lift-md". Defaults values are "slide-ios" and "fade-md".

(翻訳中)
options.animationOptions アニメーション時のduration, delay, timingを指定します。e.g. {duration: 0.2, delay: 0.4, timing: 'ease-in'}
options.callback このメソッドによる画面遷移が終了した際に呼び出される関数オブジェクトを指定します。

メソッド

シグネチャ 概要
popPage([options]) 現在表示中のページをページスタックから取り除きます。一つ前のページに戻ります。
pushPage(page, [options]) 指定したpageを新しいページスタックに追加します。新しいページが表示されます。
replacePage(page, [options]) 現在表示中のページをを指定したページに置き換えます。
insertPage(index, page, [options]) 指定したpageをページスタックのindexで指定した位置に追加します。
removePage(index, [options]) 指定したインデックスにあるページを削除します。
resetToPage(page, [options]) ページスタックをリセットし、指定したページを表示します。
bringPageTop(item, [options]) 指定したページをページスタックの一番上に移動します。もし指定したページが無かった場合新しくpushされます。
popPage([options]): Promise

現在表示中のページをページスタックから取り除きます。一つ前のページに戻ります。

返り値: 明らかにしたページを解決するPromiseを返します。

パラメーター
名前 概要
options Object オプションを指定するオブジェクト。
options.animation String

Animation name. Available animations are "slide", "lift", "fade" and "none". These are platform based animations. For fixed animations, add "-ios" or "-md" suffix to the animation name. E.g. "lift-ios", "lift-md". Defaults values are "slide-ios" and "fade-md".

(翻訳中)
options.animationOptions String アニメーション時のduration, delay, timingを指定します。e.g. {duration: 0.2, delay: 0.4, timing: ‘ease-in’}
options.callback Function このメソッドによる画面遷移が終了した際に呼び出される関数オブジェクトを指定します。
options.data Object Custom data that will be stored in the new page element. (翻訳中)
options.times Number Number of pages to be popped. Only one animation will be shown. (翻訳中)
pushPage(page, [options]): Promise

指定したpageを新しいページスタックに追加します。新しいページが表示されます。

返り値: 追加したページを解決するPromiseを返します。

パラメーター
名前 概要
page String pageのURLか、もしくは<template>で宣言したテンプレートのid属性の値を指定できます。
options Object オプションを指定するオブジェクト。
options.page String Page URL. Only necessary if page parameter is null or undefined. (翻訳中)
options.pageHTML String HTML code that will be computed as a new page. Overwrites page parameter. (翻訳中)
options.animation String

Animation name. Available animations are "slide", "lift", "fade" and "none". These are platform based animations. For fixed animations, add "-ios" or "-md" suffix to the animation name. E.g. "lift-ios", "lift-md". Defaults values are "slide-ios" and "fade-md".

(翻訳中)
options.animationOptions String アニメーション時のduration, delay, timingを指定します。e.g. {duration: 0.2, delay: 0.4, timing: 'ease-in'}
options.callback Function pushPage()による画面遷移が終了した時に呼び出される関数オブジェクトを指定します。
options.data Object Custom data that will be stored in the new page element. (翻訳中)
replacePage(page, [options]): Promise

現在表示中のページをを指定したページに置き換えます。

返り値: 新しいページを解決するPromiseを返します。

insertPage(index, page, [options]): Promise

指定したpageをページスタックのindexで指定した位置に追加します。

返り値: 指定したページを解決するPromiseを返します。

パラメーター
名前 概要
index Number スタックに挿入する位置のインデックスを指定します。
removePage(index, [options]): Promise

指定したインデックスにあるページを削除します。

返り値: 削除によって表示されたページを解決するPromiseを返します。

パラメーター
名前 概要
index Number スタックから削除するページのインデックスを指定します。
resetToPage(page, [options]): Promise

ページスタックをリセットし、指定したページを表示します。

返り値: 新しいトップページを解決するPromiseを返します。

パラメーター
名前 概要
options.pop Boolean Performs ‘pop’ effect if true instead of ‘push’ or none. This also sets options.animation value to default instead of none. (翻訳中)
bringPageTop(item, [options]): Promise

指定したページをページスタックの一番上に移動します。もし指定したページが無かった場合新しくpushされます。

返り値: 新しいトップページを解決するPromiseを返します。

パラメーター
名前 概要
item String|Number ページのURLかもしくはons-navigatorのページスタックのインデックス値を指定します。

Inputs

名前 概要
page {Type<any>} ページコンポーネントのクラスを指定します。

お困りですか?

Onsen UIに関する質問は、Stack Overflowにてonsen-uiタグを付与してください。Onsen UIチームはあなたの問題解決をお手伝いします。

バグ報告や機能要望については、GitHub Issuesに記載をお願いいたします。

あわせて、下記の情報も参考にしてください。