Onsen UIのナビゲーション型の機能をいくつか試してみます。
pushPage()・popPage()
pushPage()は新しいページを表示、popPage()は1つ前のページに戻るメソッドです。
index.html
<ons-navigator var="myNavigator" page="top.html"></ons-navigator>
top.html
<ons-page> <ons-toolbar> <div class="center">トップ</div> </ons-toolbar> <div class="contents"> <ons-list> <ons-list-header>pushPage()</ons-list-header> <ons-list-item modifier="chevron" ng-click="myNavigator.pushPage('under.html', {animation: 'slide'})">slide</ons-list-item> <ons-list-item modifier="chevron" ng-click="myNavigator.pushPage('under.html', {animation: 'lift'})">lift</ons-list-item> <ons-list-item modifier="chevron" ng-click="myNavigator.pushPage('under.html', {animation: 'fade'})">fade</ons-list-item> <ons-list-item modifier="chevron" ng-click="myNavigator.pushPage('under.html', {animation: 'none'})">none</ons-list-item> <ons-list-item modifier="chevron" ng-click="myNavigator.pushPage('under.html', {onTransitionEnd: console.log('pushPageコールバック')})">callback</ons-list-item> </ons-list> </div> </ons-page>
under.html
<ons-page> <ons-toolbar> <div class="left"> <ons-back-button>戻る</ons-back-button> </div> <div class="center">下層ページ</div> </ons-toolbar> <div class="contents"> <ons-list> <ons-list-header>popPage()</ons-list-header> <ons-list-item modifier="chevron" ng-click="myNavigator.popPage({animation: 'slide'})">slide</ons-list-item> <ons-list-item modifier="chevron" ng-click="myNavigator.popPage({animation: 'lift'})">lift</ons-list-item> <ons-list-item modifier="chevron" ng-click="myNavigator.popPage({animation: 'fade'})">fade</ons-list-item> <ons-list-item modifier="chevron" ng-click="myNavigator.popPage({animation: 'none'})">none</ons-list-item> <ons-list-item modifier="chevron" ng-click="myNavigator.popPage({onTransitionEnd: console.log('popPageコールバック')})">callback</ons-list-item> </ons-list> </div> </ons-page>
pushPage(pageUrl[, options]) | 新しいページを表示する。 optionsにはanimationでアニメーションの設定、onTransitionEndでコールバックの設定が可能。 |
---|---|
popPage([options]) | 1つ前のページに戻る。 optionsにはanimationでアニメーションの設定、onTransitionEndでコールバックの設定が可能。 |
ons-toolbar
index2.html
<ons-navigator var="myNavigator" page="top2.html"></ons-navigator>
top2.html
<ons-page> <ons-toolbar> <div class="center">トップ</div> </ons-toolbar> <div class="contents"> <ons-list> <ons-list-header>ons-toolbar</ons-list-header> <ons-list-item modifier="chevron" ng-click="myNavigator.pushPage('toolbar1.html')">戻るボタンとアイコン</ons-list-item> <ons-list-item modifier="chevron" ng-click="myNavigator.pushPage('toolbar2.html')">検索</ons-list-item> <ons-list-item modifier="chevron" ng-click="myNavigator.pushPage('toolbar3.html')">ons-bottom-toolbar</ons-list-item> <ons-list-item modifier="chevron" ng-click="myNavigator.pushPage('toolbar4.html')">インライン</ons-list-item> <ons-list-item modifier="chevron" ng-click="myNavigator.pushPage('toolbar5.html')">背景透過</ons-list-item> </ons-list> </div> </ons-page>
toolbar1.html
<ons-page> <ons-toolbar> <div class="left"> <ons-back-button>戻る</ons-back-button> </div> <div class="center">戻るボタンとアイコン</div> <div class="right"> <ons-toolbar-button> <ons-icon icon="fa-bars"></ons-icon> </ons-toolbar-button> </div> </ons-toolbar> <div class="contents"> <ons-button ng-click="myNavigator.popPage()">戻る</ons-button> </div> </ons-page>
toolbar2.html
<ons-page> <ons-toolbar> <div class="center"> <input type="search" class="search-input" placeholder="キーワード"> </div> </ons-toolbar> <div class="contents"> <ons-button ng-click="myNavigator.popPage()">戻る</ons-button> </div> </ons-page>
toolbar3.html
<ons-page> <div class="contents"> <ons-button ng-click="myNavigator.popPage()">戻る</ons-button> </div> <ons-bottom-toolbar> <div class="center">bottom</div> </ons-bottom-toolbar> </ons-page>
toolbar4.html
<ons-page> <ons-toolbar inline> <div class="center">インライン</div> </ons-toolbar> <div class="contents"> <ons-button ng-click="myNavigator.popPage()">戻る</ons-button> <p>スクロールしても追従しません。</p> </div> </ons-page>
toolbar5.html
<ons-page> <ons-toolbar modifier="transparent"> <div class="center">背景透過</div> </ons-toolbar> <div class="contents"> <ons-button ng-click="myNavigator.popPage()">戻る</ons-button> </div> </ons-page>
ons-toolbar | ツールバーを追加。 ツールバー内はclass名(left,center,right)でそれぞれ左・中央・右に配置。 |
---|
ons-navigatorのイベント
pushPage()とpopPage()の実行前後に発火するイベントを使ってみます。
index.html
<ons-navigator var="myNavigator" page="top3.html"></ons-navigator>
top3.html
<ons-page> <ons-toolbar> <div class="center">トップ</div> </ons-toolbar> <div class="contents"> <ons-button ng-click="myNavigator.pushPage('under2.html')">pushPage()</ons-button> </div> </ons-page>
under2.html
<ons-page> <ons-toolbar> <div class="left"> <ons-back-button>戻る</ons-back-button> </div> <div class="center">下層ページ</div> </ons-toolbar> <div class="contents"> <ons-button ng-click="myNavigator.popPage()">popPage()</ons-button> <ons-button ng-click="myNavigator.pushPage('top3.html')">pushPage()のcancel</ons-button> </div> </ons-page>
JavaScript
ons.ready(function() { myNavigator.on('prepush', function(e) { console.group('prepush'); console.log(e.currentPage); console.log(e.navigator); console.groupEnd(); // under2.htmlではページ遷移をキャンセル if(e.currentPage.page == 'under2.html') { e.cancel(); } }); myNavigator.on('postpush', function(e) { console.group('postpush'); console.log(e.leavePage); console.log(e.enterPage); console.log(e.navigator); console.groupEnd(); }); myNavigator.on('prepop', function(e) { console.group('prepop'); console.log(e.currentPage); console.log(e.navigator); console.groupEnd(); }); myNavigator.on('postpop', function(e) { console.group('postpop'); console.log(e.leavePage); console.log(e.enterPage); console.log(e.navigator); console.groupEnd(); }); });
prepush | pushPage()・replacePage()・resetToPage()の前に発火。 |
---|---|
postpush | pushPage()・replacePage()・resetToPage()の後に発火。 |
prepop | popPage()の前に発火。 |
postpop | popPage()の後に発火。 |
ons-navigatorのメソッド
pushPage()、popPage()以外のメソッドを使ってみます。
index4.html
<ons-navigator var="myNavigator" page="top4.html"></ons-navigator>
top4.html
<ons-page> <ons-toolbar> <div class="center">トップ</div> </ons-toolbar> <div class="contents"> <ons-button ng-click="myNavigator.pushPage('under3.html')">pushPage()</ons-button> </div> </ons-page>
under3.html
<ons-page> <ons-toolbar> <div class="left"> <ons-back-button>戻る</ons-back-button> </div> <div class="center">下層ページ</div> </ons-toolbar> <div class="contents"> <ons-list> <ons-list-item modifier="chevron" ng-click="myNavigator.insertPage(1, 'insert.html')">insertPage()</ons-list-item> <ons-list-item modifier="chevron" ng-click="myNavigator.replacePage('replace.html')">replacePage()</ons-list-item> <ons-list-item modifier="chevron" ng-click="myNavigator.resetToPage('reset.html')">resetToPage()</ons-list-item> <ons-list-item modifier="tappable" ng-click="console.log(myNavigator.getCurrentPage())">getCurrentPage()</ons-list-item> <ons-list-item modifier="tappable" ng-click="console.log(myNavigator.getPages())">getPages()</ons-list-item> <ons-list-item modifier="tappable" ng-click="console.log(myNavigator.getDeviceBackButtonHandler())">getDeviceBackButtonHandler()</ons-list-item> </ons-list> </div> </ons-page>
insert.html
<ons-page> <ons-toolbar> <div class="left"> <ons-back-button>戻る</ons-back-button> </div> <div class="center">挿入ページ</div> </ons-toolbar> <div class="contents"> <p>ページスタックの1番目に挿入されるページです。</p> <ons-button ng-click="myNavigator.popPage()">popPage()</ons-button> </div> </ons-page>
replace.html
<ons-page> <ons-toolbar> <div class="left"> <ons-back-button>戻る</ons-back-button> </div> <div class="center">置き換えページ</div> </ons-toolbar> <div class="contents"> <p>下層ページからこのページにページ遷移(置き変わり)します。<br /> popPage()を押すと下層ページには戻りません。</p> <ons-button ng-click="myNavigator.popPage()">popPage()</ons-button> </div> </ons-page>
reset.html
<ons-page> <ons-toolbar> <div class="left"> <ons-back-button>戻る</ons-back-button> </div> <div class="center">リセットページ</div> </ons-toolbar> <div class="contents"> <p>ページスタックをリセットしたので、popPage()では戻れません。</p> <ons-button ng-click="myNavigator.popPage()">popPage()</ons-button> <ons-button ng-click="myNavigator.pushPage('top4.html')">pushPage()</ons-button> </div> </ons-page>
insertPage(index, pageUrl[, options]) | 指定したpageUrlをページスタックのindexの位置に追加。 |
---|---|
replacePage(pageUrl[, options]) | 現在のページを指定したpageUrlに置き換える。 |
resetToPage(pageUrl[, options]) | ページスタックをリセットして、指定したpageUrlを表示。 |
getCurrentPage() | 現在のページを取得。 |
getPages() | ページスタックの一覧を取得。 |
getDeviceBackButtonHandler() | バックボタンハンドラを取得。 |
【参考サイト】
コメントが承認されるまで時間がかかります。