ビュー / ルーター
ビュー (<div class="view">) は、独自の settings、navigation、history を持つアプリの独立した視覚的な部分です。そのため、アプリ内アプリのようなものです。このような機能により、アプリの各部分を簡単に操作できます。
ビューレイアウト
ビューのHTML構造を見てみましょう。
<body>
<!-- app root -->
<div id="app">
<!-- view inside of panel -->
<div class="panel panel-left panel-cover">
<div class="view panel-view"> ... </div>
</div>
<!-- Your main view -->
<div class="view view-main">
<!-- View related pages -->
...
</div>
<div class="popup">
<div class="view popup-view"> ... </div>
</div>
</div>
</body>
ご覧のとおり、ビューはアプリのほぼどこにでも配置できます。
メインビュー
メインビューには、追加のview-mainクラスが必要です。メインビューが必要な理由は何ですか?デフォルトでは、(初期化されたビュー内にない)すべてのリンクはメインビューにページを読み込みます。また、browserHistory
ハッシュナビゲーションを使用する場合、メインビューのナビゲーションでのみ機能します。
複数のビューレイアウト
アプリのルートに複数のビューを持つアプリ(いわゆる「タブ付きビュー」アプリ)の場合、ビューを追加の<div class="views">
要素でラップする必要があります。
「ビュー」要素は1つのみ許可されます!
<body>
<!-- app root -->
<div id="app">
<!-- view inside of panel -->
<div class="panel panel-left panel-cover">
<div class="view panel-view"> ... </div>
</div>
<!-- Views container -->
<div class="views tabs">
<!-- Your main view -->
<div class="view view-main tab tab-active" id="view-1">
<!-- View related pages -->
...
</div>
<!-- Another view -->
<div class="view tab" id="view-2">
<!-- View related pages -->
...
</div>
...
</div>
<div class="popup">
<div class="view popup-view"> ... </div>
</div>
</div>
</body>
ビューアプリメソッド
HTMLに必要なビューが既にあり、アプリが既に初期化されている場合、ビューを初期化する必要があります。ビューを操作するための利用可能なアプリメソッドを見てみましょう。
app.views.create(viewEl, parameters) - ビューの初期化
- viewEl - 文字列またはHTMLElement。文字列の場合、ビュー要素のCSSセレクター
- parameters - オブジェクト。ビューのパラメーターを含むオブジェクト
- メソッドは、作成されたばかりのビューインスタンスを含むオブジェクトを返します。
app.views.get(viewEl) - HTML要素によるビューインスタンスの取得
- viewEl - 文字列またはHTMLElement。文字列の場合、ビュー要素のCSSセレクター
- メソッドは、作成されたばかりのビューインスタンスを含むオブジェクトを返します。
メインアプリビューの代わりに、開かれたポップアップ、ポップオーバー、開かれたパネル、タブなどにもビューがあるため、現在アクティブなビューを取得する必要がある場合があります。このメソッドを使用すると、現在アクティブ/表示されている/「最上位」のビューのビューインスタンスを取得できます。
たとえば、パネルにビューを初期化し、パネルが現在開いている場合、このメソッドはパネルのビューを返します。または、各タブがビューであるタブバーレイアウトを持つアプリを使用する場合、このメソッドは現在アクティブ/表示されているタブビューを返します。
app.views.current - 現在アクティブ/表示されているビューインスタンスを取得します。
- メソッドは、作成されたばかりのビューインスタンスを含むオブジェクトを返します。
ビューパラメーター
では、ビューを作成するために必要なパラメーターのリストを見てみましょう。
パラメーター | 型 | デフォルト | 説明 |
---|---|---|---|
name | 文字列 | ビュー名。名前を付けてビューが作成された場合、app.views.[name] を介してアクセスできます。 | |
main | ブール値 | false | これがメインビューかどうかを指定します。渡されない場合、その要素にview-main クラスがあるかどうかによって判断されます。 |
router | ブール値 | true | ビュールーターを無効にする場合はfalseに設定します。 |
initRouterOnTabShow | ブール値 | false | 有効になっている場合、ビューがタブであり、ビュータブが表示されるまでルーターを初期化して最初のページを読み込みません。 |
url | 文字列 | デフォルト(初期)ビューのURL。指定されていない場合、ドキュメントのURLと同じです。 | |
loadInitialPage | ブール値 | true | 有効になっている場合、ビュー内に子ページがない場合。初期URLに一致する初期ページを読み込みます。 |
linksView | 文字列 オブジェクト | 別のビューのCSSセレクター、または初期化されたビューインスタンスを持つオブジェクト。デフォルトでは、初期化された(のみ)ビュー内のすべてのリンクは、このビューにページを読み込みます。これは、他のビューにページを読み込むようにリンクに指示します。 | |
allowDuplicateUrls | ブール値 | false | このパラメーターを有効にして、ビューの現在「アクティブ」なページと同じURLを持つ新しいページの読み込みを許可できます。 |
animate | ブール値 | true | ページ間のトランジションを有効にします。 |
preloadPreviousPage | ブール値 | true | ナビゲーションで深く進むときに前のページのプリロードを有効/無効にします。「ページを戻るスワイプ」機能の正しい動作には有効にする必要があります。 |
reloadPages | ブール値 | false | 有効になっている場合、ビューは常に新しいページを読み込むことなく、現在アクティブなページを常に再読み込みします。 |
restoreScrollTopOnBack | ブール値 | true | 有効にすると、このページに戻ったときにページのスクロールトップが復元されます。 |
iosPageLoadDelay | 数値 | 0 | 新しいページが読み込まれてDOMに挿入され、トランジションされるまでの遅延(ミリ秒)。パフォーマンスを向上させるために少し増やすことができます。iOSテーマでのみ有効になります。 |
mdPageLoadDelay | 数値 | 0 | 新しいページが読み込まれてDOMに挿入され、トランジションされるまでの遅延(ミリ秒)。パフォーマンスを向上させるために少し増やすことができます。MDテーマでのみ有効になります。 |
passRouteQueryToRequest | ブール値 | true | 有効にすると、ルーターはルートURLクエリをリクエストURLクエリに渡します(url およびcomponentUrl ルートプロパティの場合)。次のルートがあるとします。
そして、/somepage/?foo=bar URLを持つリンクをクリックすると、http://myserver/page/?foo=bar URLからページを読み込みます。 |
passRouteParamsToRequest | ブール値 | false | 有効にすると、ルーターは現在のルートパラメーターをリクエストURLクエリに渡します(url およびcomponentUrl ルートプロパティの場合)。次のルートがあるとします。
そして、/user/11/posts/12/ URLを持つリンクをクリックすると、http://myserver/userpost/?userId=11&postId=12 URLからページを読み込みます。 |
マスターディテール | |||
masterDetailBreakpoint | 数値 | 0 | マスタールート(master: true パラメーターを持つルート)のマスターディテールビューを有効にするための最小アプリ幅。 |
masterDetailResizable | ブール値 | false | サイズ変更可能なマスターディテールレイアウトを有効にします。 サイズ変更可能なマスターディテールの最小/最大幅を指定するには、スタイルでpage-masterに設定する必要があります。例:
|
reloadDetail | ブール値 | false | 有効にすると、ナビゲートするたびにすべてのディテールページを再読み込みします。 |
ルート | |||
routes | 配列 | 現在のビューのルートを含む配列。指定されている場合、グローバルアプリルートを上書きし、ここで指定されたルートのみが現在のビューで使用可能になります。 | |
routesAdd | 配列 | グローバルアプリルートを拡張する追加のルートを含む配列。この追加ルートは、現在のビューでのみ使用できます。 | |
routesBeforeEnter | function(context) 配列 | すべてのルートの読み込み/開始前に実行される関数(または関数の配列)。ルートの読み込みを続行するには、resolve を呼び出す必要があります。配列 の場合、続行するには配列内のすべての関数を解決する必要があります。ルートbeforeEnterと同じですが、すべてのルートで機能します。 | |
routesBeforeLeave | function(context) 配列 | すべてのルートのアンロード/終了前に実行される関数(または関数の配列)。ナビゲーションを続行するには、resolve を呼び出す必要があります。配列 の場合、続行するには配列内のすべての関数を解決する必要があります。ルートbeforeLeaveと同じですが、すべてのルートで機能します。 | |
要素の削除 | |||
removeElements | ブール値 | true | ページのトランジション中に、ルーターは未使用のページとナビゲーションバーの要素をDOMから削除する場合があります。要素の削除を手動で、またはVueやReactなどの他のライブラリを使用して処理する場合は、無効にすることが役立ちます。 |
removeElementsWithTimeout | ブール値 | false | 有効にすると、ルーターはタイムアウト後に要素を削除します。 |
removeElementsTimeout | 数値 | 0 | 要素を削除するタイムアウト(removeElementsWithTimeout: true の場合)。 |
unloadTabContent | ブール値 | true | タブが表示されると、ルーティング可能なタブコンテンツ(タブの内部コンテンツを削除)をアンロードします。ルーティング可能なタブの場合のみ。 |
コンポーネントキャッシュ | |||
componentCache | ブール値 | true | 有効にすると、ルーターはcomponentUrl を介して指定されたコンポーネントをキャッシュします。 |
XHRキャッシュ | |||
xhrCache | ブール値 | true | ルーターはページのHTMLコンテンツの読み込みにAjaxを使用できるため、特にそれらのページのコンテンツが頻繁に更新されない場合は、キャッシュを使用することをお勧めします。 |
xhrCacheIgnore | 配列 | [] | キャッシュされないURL(文字列)の配列。 |
xhrCacheIgnoreGetParameters | ブール値 | false | "true"の場合、「about.html?id=2」と「about.html?id=3」のようなURLは、単一の「about.html」ページとして扱われ、キャッシュされます。 |
xhrCacheDuration | 数値 | 1000 * 60 * 10 | アプリが別のAjaxリクエストでページを読み込む代わりにキャッシュを使用する期間(ミリ秒)。デフォルトでは10分かかります。 |
iOSダイナミックナビゲーションバー | |||
iosDynamicNavbar | ブール値 | true | iOSテーマのダイナミックナビゲーションバーを有効にします。 |
iosAnimateNavbarBackIcon | ブール値 | true | このオプション(有効になっている場合)は、ダイナミックナビゲーションバーの左側の戻るリンクアイコンアニメーションによりネイティブな外観を与えます。デフォルトの戻るリンクアイコンを左側に「スライド」として設定したダイナミックナビゲーションバーを使用する場合にのみ役立ちます。 |
戻るスワイプ | |||
iosSwipeBack | ブール値 | true | 画面の左端からスワイプして前のページに戻る機能を有効/無効にします。iOSテーマ用 |
iosSwipeBackThreshold | 数値 | 0 | px単位の値。スワイプバックアクションは、「タッチ距離」がこの値を超えた場合に開始されます。iOSテーマ用 |
iosSwipeBackActiveArea | 数値 | 30 | px単位の値。スワイプバックアクションをトリガーする画面の左端の非表示領域の幅。iOSテーマ用 |
iosSwipeBackAnimateShadow | ブール値 | true | スワイプバックアクション中のbox-shadowアニメーションを有効/無効にします。パフォーマンスを向上させるために無効にすることができます。iOSテーマ用 |
iosSwipeBackAnimateOpacity | ブール値 | true | スワイプバックアクション中の不透明度アニメーションを有効/無効にします。パフォーマンスを向上させるために無効にすることができます。iOSテーマ用 |
mdSwipeBack | ブール値 | false | 画面の左端からスワイプして前のページに戻る機能を有効/無効にします。MDテーマ用 |
mdSwipeBackThreshold | 数値 | 0 | px単位の値。スワイプバックアクションは、「タッチ距離」がこの値を超えた場合に開始されます。MDテーマ用 |
mdSwipeBackActiveArea | 数値 | 30 | px単位の値。スワイプバックアクションをトリガーする画面の左端の非表示領域の幅。MDテーマ用 |
mdSwipeBackAnimateShadow | ブール値 | true | スワイプバックアクション中のbox-shadowアニメーションを有効/無効にします。パフォーマンスを向上させるために無効にすることができます。MDテーマ用 |
mdSwipeBackAnimateOpacity | ブール値 | false | スワイプバックアクション中の不透明度アニメーションを有効/無効にします。パフォーマンスを向上させるために無効にすることができます。MDテーマ用 |
ブラウザ履歴 | |||
browserHistory | ブール値 | false | ウェブアプリ(Cordova/Capacitorまたはホーム画面ウェブアプリではない)を開発する場合、ハッシュナビゲーションを有効にすることが有用です(ブラウザのURLは「http://my-webapp.com/#!/about.html」のようになります)。ユーザーは、ブラウザのデフォルトの戻るボタンと進むボタンを使用してアプリの履歴を移動することもできます。 |
browserHistoryRoot | 文字列 | ブラウザ履歴ルートURLセパレータ(例:「http://my-app.com/」)。空の("") `browserHistorySeparator`を使用する場合にのみ役立ちます。 | |
browserHistoryAnimate | ブール値 | true | ブラウザ履歴の変更時のページ遷移を有効/無効にします。 |
browserHistoryAnimateOnLoad | ブール値 | false | アプリ読み込み時のブラウザ履歴ページ遷移を有効/無効にします。 |
browserHistorySeparator | 文字列 | #! | ブラウザ履歴URLセパレータ。'#page/'のようなものに変更できます。その場合、ブラウザ履歴URLは「http://myapp.com/#page/about.html」のようになります。 |
browserHistoryOnLoad | ブール値 | true | アプリ読み込み時にブラウザ履歴URLの解析とページの読み込みを無視するには、無効にします。 |
browserHistoryInitialMatch | ブール値 | false | サーバーが要求されたURLに一致するコンテンツで応答するように構成されている場合(例:Nuxt.js、Next.jsなどのサーバーサイドレンダリングフレームワークを使用する場合)に`true`に設定します。Framework7-React/Vue/Svelteで使用する場合も有効にする必要があります。デフォルトでは無効です。 |
browserHistoryStoreHistory | ブール値 | true | 有効にすると(デフォルト)、ルーター履歴をlocalStorageに保存し、次のウェブアプリ訪問時に復元しようとします。 |
browserHistoryTabs | 文字列 | replace | `replace`または`push`になります。「replace」(デフォルト)の場合、ルーティング可能なタブの変更時に状態を置き換えます。それ以外の場合は(「push」の場合)、ルーティング可能なタブの変更ごとに履歴に追加されるため、ブラウザの戻るボタンを使用してタブ間を戻ることができます。 |
イベントハンドラ | |||
on | オブジェクト | イベントハンドラのオブジェクト。例えば
|
以下のすべてのパラメータは、グローバルアプリパラメータの`view`プロパティで使用して、すべてのビューのデフォルトを設定できます。例えば
var app = new Framework7({
view: {
iosDynamicNavbar: false,
xhrCache: false,
}
});
ビューのメソッドとプロパティ
ビューを作成するには、次のように呼び出します。
var view = app.views.create({ /* parameters */ })
その後、便利なメソッドとプロパティを持つ初期化されたインスタンス(上記の例では`view`変数)が取得できます。
プロパティ | |
---|---|
view.app | グローバルアプリインスタンスへのリンク |
view.el | ビューのHTML要素 |
view.$el | ビューのHTML要素を含むDom7インスタンス |
view.name | `name`パラメータで渡されたビュー名 |
view.main | メインビューかどうかを示すブール値のプロパティ |
view.routes | 使用可能なルーターのルートを含む配列 |
view.history | ビュー履歴を含む配列 |
view.params | ビューの初期化パラメータを含むオブジェクト |
view.router | ビューの初期化されたルーターインスタンス |
メソッド | |
view.destroy() | ビューインスタンスを破棄します。 |
view.on(event, handler) | イベントハンドラを追加します。 |
view.once(event, handler) | 発火後に削除されるイベントハンドラを追加します。 |
view.off(event, handler) | イベントハンドラを削除します。 |
view.off(event) | 指定されたイベントのすべてのハンドラを削除します。 |
view.emit(event, ...args) | インスタンスでイベントを発火します。 |
ビューイベント
ビューは、ビュー要素とアプリおよびビューインスタンスで以下のDOMイベントとイベントを発火します。
ビューDOMイベント
イベント | ターゲット | 説明 |
---|---|---|
view:init | ビュー要素<div class="view"> | ビューの初期化時にトリガーされます。 |
view:resize | ビュー要素<div class="view"> | (`masterDetailResizable`が有効な場合)マスターディテールサイズの変更時にトリガーされます。 |
ビューインスタンスイベント
ビューインスタンスは、自身インスタンスとアプリインスタンスの両方でイベントを発火します。アプリインスタンスのイベントは、`view`というプレフィックスが付いた同じ名前を持ちます。
イベント | ターゲット | 引数 | 説明 |
---|---|---|---|
init | view | (view) | ビューの初期化時にトリガーされます。 |
viewInit | app | ||
resize | view | (view, width) | (`masterDetailResizable`が有効な場合)マスターディテールサイズの変更時にトリガーされます。 |
viewResize | app |
ルーターAPI/メソッドとプロパティ
ビューの主な目的は、ページ間のナビゲーション/ルーティングです。`view.router`でルーターインスタンスにアクセスできます。ルーティングとナビゲーションを制御するための多くの便利なメソッドとプロパティがあります。
ルーターのプロパティ | |
---|---|
router.app | グローバルアプリインスタンスへのリンク |
router.view | 関連するビューインスタンスへのリンク |
router.params | ルーターの初期化パラメータを含むオブジェクト |
router.el | ルーターのビューHTML要素 |
router.$el | ルーターのビューHTML要素を含むDom7インスタンス |
router.currentPageEl | 現在のページのHTML要素 |
router.routes | 使用可能なルーターのルートを含む配列 |
router.history | ルーターのビュー履歴を含む配列 |
router.cache | ルーター/ビューのキャッシュデータを含むオブジェクト |
router.currentRoute | 現在のルートデータを含むオブジェクト。以下のプロパティがあります。
|
router.previousRoute | 以前にアクティブだったルートデータを含むオブジェクト。`currentRoute`と同じオブジェクト形式です。 |
router.allowPageChange | ページの変更/ナビゲーションが許可されているかどうかを示すブール値のプロパティ |
ルーターメソッド | |
router.navigate(url, options) | 新しいページに移動(読み込み)します。
|
router.navigate(parameters, options) | パラメータで新しいページに移動(読み込み)します。このメソッドを使用すると、`name`でルートに移動できます。
例えば、次のルートがある場合
次のように呼び出して移動できます。
パラメータを含むより複雑なルートがある場合
パラメータも渡す必要があります。
|
router.back(url, options) | ビューの履歴を遡って前のページに戻ります。
|
router.refreshPage() | 現在のページを更新/リロードします。実際には、次と同じです。
|
router.clearPreviousHistory() | ルーターの以前のページ履歴をクリアし、DOMから以前のすべてのページを削除します。 |
router.updateCurrentUrl(url) | 現在のルートURLを更新し、渡されたURLに基づいてrouter.currentRoute のプロパティ(query、params、hashなど)を更新します。このメソッドは、コンテンツの読み込みや再読み込みは行いません。現在のルートURLのみを変更します。 |
router.generateUrl({name, query, params}) | 指定されたルート名に基づいてルートURLを生成します。例えば、以下のルートがある場合
ルートのURLは、このように取得できます。
|
router.on(event, handler) | イベントハンドラを追加します。 |
router.once(event, handler) | 発火後に削除されるイベントハンドラを追加します。 |
router.off(event, handler) | イベントハンドラを削除します。 |
router.off(event) | 指定されたイベントのすべてのハンドラを削除します。 |
router.emit(event, ...args) | インスタンスでイベントを発火します。 |
ページとビュー間のリンク
常にルーターメソッドを使用してページ間を移動するのは、必ずしも快適ではありません。多くの場合、リンク を使用してページ間を移動できます。また、data-
属性を使用して追加のナビゲーションパラメータを渡すことができます。
<!-- same as router.navigate('/somepage/'); -->
<a href="/somepage/">Some Page</a>
<!-- same as router.navigate('/somepage/', {reloadCurrent: true, animate: false}); -->
<a href="/somepage/" data-animate="false" data-reload-current="true">Some Page</a>
<!-- same as router.back(); -->
<a href="#" class="back">Go back</a>
<!-- same as router.back('/home/', {force: true, ignoreCache: true}); -->
<a href="/home/" data-force="true" data-ignore-cache="true" class="back">Go back</a>
リンクのデフォルト動作
- リンクが初期化されていないビュー内にある場合、メインビューにページを読み込みます。
- リンクが初期化されたビュー内にある場合、そのビューにページを読み込みます(ビューの
linksView
パラメータに他のビューが指定されていない場合)。
別のビューにページを読み込む必要がある場合は、リンクのdata-view
属性にそのビューのCSSセレクタを指定できます。
<!-- left view -->
<div class="view view-init view-left" data-name="left">
...
<!-- will load "some-page" to main view -->
<a href="/some-page/" data-view=".view-main">Some Page</a>
...
</div>
<!-- main view -->
<div class="view view-init view-main">
...
<!-- will load "another-page" to left view -->
<a href="/another-page/" data-view=".view-left">Another Page</a>
...
</div>
「現在の」ビュー(現在アクティブ/表示されているViewインスタンス)にページを読み込む必要がある場合は、data-view="current"
属性を設定する必要があります。
<!-- will load "another-page" in current view -->
<a href="/another-page/" data-view="current">Another Page</a>
ルーターが特定のリンクの処理を防止する必要がある場合は、そのようなリンクにprevent-router
クラスを追加できます。
<!-- This link will be ignored by router -->
<a href="/some-page/" class="prevent-router">Some Page</a>
ルーターイベント
ルーターには多くの有用なイベントがあります。
ルーターDOMイベント
ルーターは、ページをスワイプバックする際に次のDOMイベントを発生させます。
イベント | ターゲット | 説明 |
---|---|---|
swipeback:move | ビュー要素<div class="view"> | スワイプバック移動中にトリガーされます。 |
swipeback:beforechange | ビュー要素<div class="view"> | スワイプバックアニメーションが前のページに切り替わる直前に、離したときにトリガーされます。 |
swipeback:afterchange | ビュー要素<div class="view"> | スワイプバックアニメーションが前のページに切り替わった後に、離したときにトリガーされます。 |
swipeback:beforereset | ビュー要素<div class="view"> | スワイプバックアニメーションが現在のページに戻る直前に、離したときにトリガーされます。 |
swipeback:afterreset | ビュー要素<div class="view"> | スワイプバックアニメーションが現在のページに戻った後に、離したときにトリガーされます。 |
ルーターインスタンスイベント
ルーターイベントはViewインスタンスとAppインスタンスにバブルアップされるため、ルーターインスタンスで発生したイベントは、ビューとアプリのインスタンスでも使用できます。
イベント | 引数 | 説明 |
---|---|---|
routeChange | (newRoute, previousRoute, router) | 現在のルートの変更時に発生します。 |
routeChanged | (newRoute, previousRoute, router) | 現在のルートの変更時、およびページ遷移後に発生します。 |
routeUrlUpdate | (newRoute, router) | router.updateCurrentUrl メソッドが呼び出されたときに発生します。 |
XHRイベント | ||
routerAjaxStart | (xhr, options) | ルーターXHRが開かれ、XHRが送信される前に発生します。送信前にXHRオブジェクトを変更するために使用できます。カスタムヘッダーなどを設定するには、このコールバックを使用します。引数として、XHRオブジェクトとナビゲーションoptions オブジェクトを受け取ります。 |
routerAjaxSuccess | (xhr, options) | リクエストが成功したときに発生します。引数として、XHRオブジェクトとナビゲーションoptions オブジェクトを受け取ります。 |
routerAjaxError | (xhr, options) | リクエストが失敗した場合に発生します。引数として、XHRオブジェクトとナビゲーションoptions オブジェクトを受け取ります。 |
routerAjaxComplete | (xhr, options) | リクエストが終了したときに発生します。引数として、XHRオブジェクトとナビゲーションoptions オブジェクトを受け取ります。 |
スワイプバックイベント | ||
swipebackMove | (data) | スワイプバック移動中にトリガーされます。data には、次のプロパティを持つオブジェクトが含まれています:percentage 、currentPageEl 、previousPageEl 、currentNavbarEl 、previousNavbarEl 。 |
swipebackBeforeChange | (data) | スワイプバックアニメーションが前のページに切り替わる直前に、離したときにトリガーされます。data には、次のプロパティを持つオブジェクトが含まれています:currentPageEl 、previousPageEl 、currentNavbarEl 、previousNavbarEl 。 |
swipebackAfterChange | (data) | スワイプバックアニメーションが前のページに切り替わった後に、離したときにトリガーされます。data には、次のプロパティを持つオブジェクトが含まれています:currentPageEl 、previousPageEl 、currentNavbarEl 、previousNavbarEl 。 |
swipebackBeforeReset | (data) | スワイプバックアニメーションが現在のページに戻る直前に、離したときにトリガーされます。data には、次のプロパティを持つオブジェクトが含まれています:currentPageEl 、previousPageEl 、currentNavbarEl 、previousNavbarEl 。 |
swipebackAfterReset | (data) | スワイプバックアニメーションが現在のページに戻った後に、離したときにトリガーされます。data には、次のプロパティを持つオブジェクトが含まれています:currentPageEl 、previousPageEl 、currentNavbarEl 、previousNavbarEl 。 |
ページイベント | ||
pageMounted | (pageData) | 新しいページがDOMに挿入されたとき、またはkeepAlive ルートを持つページがDOMにマウント/アタッチされたときにトリガーされます。引数として、ページデータを受け取ります。 |
pageInit | (pageData) | ルーターが必要なページのコンポーネントとナビゲーションバーを初期化した後にトリガーされます。引数として、ページデータを受け取ります。 |
pageReinit | (pageData) | 既に初期化されているページに移動した場合にトリガーされます。引数として、ページデータを受け取ります。 |
pageBeforeIn | (pageData) | すべてが初期化され、ページがビューに遷移する準備ができたときにトリガーされます(アクティブ/現在の位置に)。引数として、ページデータを受け取ります。 |
pageAfterIn | (pageData) | ページがビューに遷移した後にトリガーされます。引数として、ページデータを受け取ります。 |
pageBeforeOut | (pageData) | ページがビューから遷移する直前にトリガーされます。引数として、ページデータを受け取ります。 |
pageAfterOut | (pageData) | ページがビューから遷移した後にトリガーされます。引数として、ページデータを受け取ります。 |
pageBeforeUnmount | (pageData) | keepAlive ルートを持つページがDOMからアンマウント/デタッチされる直前にトリガーされます。引数として、ページデータを受け取ります。 |
pageBeforeRemove | (pageData) | ページがDOMから削除される直前にトリガーされます。メモリを解放するために、いくつかのイベントをデタッチしたり、いくつかのプラグインを破棄したりする必要がある場合に非常に役立ちます。引数として、ページデータを受け取ります。このイベントは、keepAlive ルートではトリガーされません。 |
ルーティング可能なタブイベント | ||
tabInit tabMounted | (newTabEl, tabRoute) | ルーティング可能なタブコンテンツが読み込まれた直後にトリガーされます。引数として、イベントハンドラは以下を受け取ります。
|
tabBeforeRemove | (oldTabEl, newTabEl, tabRoute) | ルーティング可能なタブコンテンツが読み込まれた直後にトリガーされます。引数として、イベントハンドラは以下を受け取ります。
|
ルーティング可能なモーダルイベント | ||
modalInit modalMounted | (modalEl, modalRoute, modal) | ルーティング可能なモーダルコンテンツが読み込まれてDOMに追加された直後にトリガーされます。引数として、イベントハンドラは以下を受け取ります。
|
modalBeforeRemove | (modalEl, modalRoute, modal) | ルーティング可能なモーダルがDOMから削除され、破棄される直前にトリガーされます。引数として、イベントハンドラは以下を受け取ります。
|
ビューの自動初期化
View APIを使用する必要がなく、アプリの初期化時にViewがDOM内にある場合、view-init
クラスを追加するだけで自動的に初期化できます。
<!-- Add view-init class -->
<div class="view view-init">
...
</div>
しかし、Viewパラメータはどうでしょうか?この場合、data-
属性で渡すことができます。
キャメルケースで使用されるパラメータ(例:browserHistory
)は、data-
属性ではケバブケース(例:data-browser-history)として使用する必要があります。
<!-- view parameters in data- attributes -->
<div class="view view-init" data-url="/" data-name="home" data-browser-history="true">
...
</div>
この場合、作成されたViewインスタンスにアクセスするには、以下を使用できます。
- メインビューの場合は、
app.views.main
を使用してメインビューインスタンスを取得できます。 - それ以外の場合は、渡された
name
パラメータ(例:app.views.home
)を使用してアクセスできます。
<!-- main view -->
<div class="view view-main view-init">
...
</div>
<!-- another view -->
<div class="view view-init" data-name="home">
...
</div>
var mainView = app.views.main;
var homeView = app.views.home;
初期ページルート
初期ページは、ルートを使用して正しく読み込むこともできます。アプリレイアウトでは、Viewを空のままにしておく必要があります。
<body>
<div id="app">
<div class="view view-main"></div>
</div>
</body>
ルートでは、「home」ルートを指定できます。
routes: [
{
path: '/',
url: './home.html'
},
...
]
そして、Viewを初期化するときは、それがデフォルトのURLであることを指定する必要があります。
app.views.create('.view-main', {
url: '/'
})
これで完了です。アプリのロード時に、「home.html」ファイルからホームページコンテンツが読み込まれます。
マスターディテール
マスター詳細パターンは、幅の広い画面やタブレットでよく使用され、2つのビューで構成されています。
- マスター - UIで何かの一覧が表示される領域です。
- 詳細 - マスターで選択した項目に関する関連情報を表示する領域です。
折り畳まれた場合(狭い画面の場合)、このようなページ間のナビゲーションは通常のルーティングのように動作します。
マスター詳細ビューへの/からのナビゲーションは、トランジションなしで行われます。
マスターページが読み込まれると、他のすべてのページは詳細ページとして読み込まれます。マスター詳細ビューから「離れる」には、reloadAll
ナビゲーションパラメータを使用することをお勧めします。
マスター詳細を有効にするには
- Viewのパラメータ
masterDetailBreakpoint
を指定する必要があります。 - マスタールートで
master: true
プロパティを設定します。 - さらに、マスタールートの
detailRoutes
プロパティにすべての詳細ルートを配置できます。
マスター詳細が有効になっている場合、カスタムスタイルに使用できる追加クラスを以下に使用できます。
page-master
- マスターページに設定されます。page-master-detail
- すべての詳細ページに設定されます。page-master-detail-root
- 最初の(ルート)詳細ページに設定されます。navbar-master
- マスターナビゲーションバーに設定されます(iosDynamicNavbar
が有効になっているiOSテーマのみ)。navbar-master-detail
- すべての詳細ナビゲーションバーに設定されます(iosDynamicNavbar
が有効になっているiOSテーマのみ)。navbar-master-detail-root
- 最初の(ルート)詳細ナビゲーションバーに設定されます(iosDynamicNavbar
が有効になっているiOSテーマのみ)。
例えば
const mainView = app.views.create('.view-main', {
// enable master detail
masterDetailBreakpoint: 800,
routes: [
{
path: '/',
url: './pages/master.html',
// specify home route as master route
master: true,
// detail routes
detailRoutes: [
{
path: '/detail/:id/',
url: './pages/detail.html',
},
]
},
]
});
そして、以下のようなものが必要です。
カスタムページ遷移
デフォルトのテーマ固有のページ遷移に加えて、カスタムページ遷移を作成するか、追加の遷移効果のいずれかを使用できます。
組み込みの追加のカスタムページ遷移は次のとおりです。
f7-circle
f7-cover
f7-cover-v
f7-dive
f7-fade
f7-flip
f7-parallax
f7-push
特定のルートでそのような遷移を使用するには、ルートオプションで指定する必要があります。
routes = [
...
{
path: '/some-page/',
url: '...',
options: {
transition: 'f7-circle',
},
},
...
]
カスタム遷移を使用して既存のルートを読み込むには、router.navigate()
メソッドで渡す必要があります。
// load /some-page/ with "f7-cover" transition
router.navigate('/some-page/', { transition: 'f7-cover' })
または、data-transition
属性を介してリンクで直接指定することもできます(他のルートオプションと同様)。
<!-- load /some-page/ with "f7-cover" transition -->
<a href="/some-page/" data-transition="f7-cover">...</a>
組み込みの遷移に加えて、カスタム遷移を作成できます。CSSアニメーションを使用して実行できます。
カスタムページ遷移を指定すると、ルーターはその要素(<div class="view">
)に次のクラスを追加します。
router-transition-[name]-forward
- 新しいページに移動する場合router-transition-[name]-backward
- 前のページに戻る場合
そして、前方へ移動する際にはpage-next
で、後方へ移動する際にはpage-current
でanimationend
イベントを待ちます。
従って、カスタムトランジションの名前をmy-transition
とすると、次のように指定できます。
.router-transition-my-transition-forward,
.router-transition-my-transition-backward {
/* Apply some styles for view element when custom transition is running */
}
.router-transition-my-transition-forward .page-current {
/* Animation when current page transforms to previous page */
animation: my-transition-current-to-prev 400ms;
}
.router-transition-my-transition-forward .page-next {
/* Animation when next page transforms to current page (new page comes into view) */
animation: my-transition-next-to-current 400ms;
}
.router-transition-my-transition-backward .page-current {
/* Animation when current page transforms to next page (going back) */
animation: my-transition-current-to-next 400ms;
}
.router-transition-my-transition-backward .page-previous {
/* Animation when previous page transforms to current page (previous page comes into view) */
animation: my-transition-prev-to-current 400ms;
}
/* Specify animations */
@keyframes my-transition-current-to-prev {
/* ... */
}
@keyframes my-transition-next-to-current {
/* ... */
}
@keyframes my-transition-current-to-next {
/* ... */
}
@keyframes my-transition-prev-to-current {
/* ... */
}
例えば、組み込みのf7-cover
トランジションは次のように指定されています。
.router-transition-f7-cover-forward,
.router-transition-f7-cover-backward {
background: #000;
perspective: 1200px;
}
.router-transition-f7-cover-forward .page-next {
animation: f7-cover-next-to-current 450ms forwards;
}
.router-transition-f7-cover-forward .page-current {
animation: f7-cover-current-to-prev 450ms forwards;
}
.router-transition-f7-cover-backward .page-current {
animation: f7-cover-current-to-next 450ms forwards;
}
.router-transition-f7-cover-backward .page-previous {
animation: f7-cover-prev-to-current 450ms forwards;
}
@keyframes f7-cover-next-to-current {
from {
transform: translateX(100%);
}
to {
transform: translateX(0%);
}
}
@keyframes f7-cover-current-to-next {
from {
transform: translateX(0%);
}
to {
transform: translateX(100%);
}
}
@keyframes f7-cover-current-to-prev {
from {
transform: translateZ(0);
opacity: 1;
}
to {
transform: translateZ(-300px);
opacity: 0.5;
}
}
@keyframes f7-cover-prev-to-current {
from {
transform: translateZ(-300px);
opacity: 0.5;
}
to {
transform: translateZ(0);
opacity: 1;
}
}