ページVueコンポーネント
Framework7のページは、Webページを考えるときと同じ意味を持っています。ページは、コンテンツを表示・操作するための主要なコンポーネントです。
Page Vueコンポーネントは、Framework7のPageを表しています。
ページのコンポーネント
以下のコンポーネントが含まれています。
f7-page
- メインのページ要素f7-page-content
- 追加のインナーページコンテンツ要素
ページのプロパティ
Prop | Type | Default | Description |
---|---|---|---|
<f7-page> properties | |||
name | string | ページ名 | |
stacked | boolean | すべてのページをDOM内に保持するstackedPages ルータパラメータを使用している場合、現在アクティブでないページに対して有効です。 | |
messages-content | boolean | Messagesコンポーネントを使用して、必要な追加スタイリングを追加する場合に有効です。 | |
page-content | boolean | true | 有効にすると、内部に page-content 要素が自動的に追加されます。タブ用の page-content 要素が少ない場合は無効にするのが便利です。 |
tabs | boolean | ページを Tabs のラッパーとして使用している場合に有効にします。 | |
login-screen | boolean | ページ内で ログイン画面 を使用して必要な追加スタイリングを行う場合に有効にする | |
no-swipeback | boolean | 現在のページのスワイプバック機能を無効にする (iOSテーマのみに影響) | |
with-subnavbar | boolean | ページ内にSub Navbarがある場合に有効にする | |
no-navbar | boolean | 共通のナビバーレイアウトを使用していて、このページで共通のナビバーを隠す(または別のものを使用する)必要がある場合に有効にする(iOSテーマにのみ影響します)。 | |
no-toolbar | boolean | 一般的なツールバー/タブバーのレイアウトを使用していて、このページでツールバーを隠す必要がある場合に有効にする(または別のものを使用する | |
hide-bars-on-scroll | boolean | ページスクロール時にナビバーとツールバーを隠す | |
hide-navbar-on-scroll | boolean | ページスクロール時にナビバーを隠す | |
hide-toolbar-on-scroll | boolean | ページ スクロール時にツールバーを隠す | |
ptr | boolean | Pull To Refreshを有効にします。 | |
ptr-distance | number | カスタムの更新時のトリガーの距離を指定します。デフォルトでは(指定されていない場合)、44pxです。 | |
ptr-preloader | boolean | true | カスタム・プル・トゥ・リフレッシュ・プリローダー要素を使用したい場合は無効にしてください。 |
ptr-bottom | boolean | false | 下からの更新を有効にする |
ptr-mousewheel | boolean | false | マウスホイールでの更新を有効にする(デスクトップアプリの場合)。PTRトップでのみ動作します。 |
infinite | boolean | Infinite Scrollを有効にする | |
infinite-top | boolean | ページ上部の無限スクロールを有効にする | |
infinite-distance | number | 無限スクロールイベントを発生させるためのページ下部からの距離(px)を指定します。デフォルトでは(指定されていない場合)、50(px)です。 | |
infinite-preloader | boolean | true | カスタム無限スクロール・プリローダーを使用する場合は無効にします。 |
<f7-page-content> properties | |||
tab | boolean | page-contentをTabとして使用している場合は有効 | |
tab-active | boolean | 現在のタブがアクティブな場合に有効 | |
ptr ptr-distance ptr-preloader ptr-bottom ptr-mousewheel infinite infinite-top infinite-distance infinite-preloader hide-bars-on-scroll hide-navbar-on-scroll hide-toolbar-on-scroll messages-content login-screen |
ページイベント
Event | Description |
---|---|
<f7-page> events | |
page:mounted | keepAlive` ルートを持つページが DOM にマウント/アタッチされると、イベントが発生します。 |
page:init | Framework7が必要なページのコンポーネントとナビバーを初期化した後にイベントが発生します。 |
page:reinit | このイベントは、すでに初期化されたページに移動した場合にトリガーされます。 |
page:beforein | 全てが初期化され、ページがビュー(アクティブ/カレントポジション)に移行できる状態になると、イベントが発生します。 |
page:afterin | ページが表示に移行した後、イベントが発生します。 |
page:beforeout | ページが表示されなくなる直前にイベントが発生します。 |
page:afterout | ページが表示されなくなった後にイベントが発生する |
page:beforeunmount | イベントは、keepAlive ルートを持つページが、DOM からアンマウント/デタッチされるときに発生します。 |
page:beforeremove | イベントは、ページがDOMから削除される直前に発生します。このイベントは、いくつかのイベントを切り離したり、メモリを解放するためにいくつかのプラグインを破棄する必要がある場合に、非常に便利です。このイベントは keepAlive ルートではトリガされません。 |
page:tabshow | このイベントは、ページの親である View as Tab が表示されたときに発生します。 |
page:tabhide | ページの親である View as Tab が非表示になると、イベントが発生します。 |
ptr:pullstart | コンテンツを更新するためにプルを動かし始めるとイベントが発生する |
ptr:pullmove | コンテンツを更新するためにプルを動かしている間にイベントが発生する |
ptr:pullend | コンテンツを更新するためにプルを解除するとイベントが発生する |
ptr:refresh | 引いて更新したコンテンツが「更新中」になるとイベントが発生する |
ptr:done | イベントは、更新のためのプルが完了し、初期状態に戻った後(pullToRefreshDoneメソッドの呼び出し後)に発生します。 |
infinite | ページのスクロールが指定された(data-distance属性の)距離に達すると、イベントが発生します。 |
<f7-page-content> events | |
tab:show | イベントは、Tabが可視/アクティブになったときに発生します。 |
tab:hide | イベントは、Tabがhidden/inactiveになったときに発生します。 |
ptr:pullstart ptr:pullmove ptr:pullend ptr:refresh ptr:done infinite |
ページスロット
Page Vueコンポーネント(<f7-page>
)には、カスタム要素用の追加スロットがあります。
default
-page-content
プロップが有効な場合、要素は "page-content" の子として挿入されます (デフォルト)。fixed
- "page" の直接の子として、"page-content" の直前に要素が挿入されます。
<f7-page>
<div slot="fixed">Fixed element</div>
<p>Page content goes here</p>
</f7-page>
<!-- にレンダリングされます。 -->
<div class="page">
<div>Fixed element</div>
<div class="page-content">
<p>Page content goes here</p>
</div>
</div>
例
Infinite Scroll
<template>
<f7-page infinite :infinite-distance="50" :infinite-preloader="showPreloader" @infinite="loadMore">
<f7-navbar title="Infinite Scroll"></f7-navbar>
<f7-block-title>Scroll bottom</f7-block-title>
<f7-list>
<f7-list-item v-for="(item, index) in items" :title="`Item ${item}`" :key="index"></f7-list-item>
</f7-list>
</f7-page>
</template>
<script>
export default {
data() {
return {
items: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20],
allowInfinite: true,
showPreloader: true,
};
},
methods: {
loadMore() {
const self = this;
if (!self.allowInfinite) return;
self.allowInfinite = false;
setTimeout(() => {
if (self.items.length >= 200) {
self.showPreloader = false;
return;
}
const itemsLength = self.items.length;
for (let i = 1; i <= 20; i += 1) {
self.items.push(itemsLength + i);
}
self.allowInfinite = true;
}, 1000);
},
},
}
</script>
Pull To Refresh
<template>
<f7-page ptr @ptr:refresh="loadMore">
<f7-navbar title="Pull To Refresh"></f7-navbar>
<f7-list media-list>
<f7-list-item
v-for="(item, index) in items"
:key="index"
:title="item.title"
:subtitle="item.author">
<template #media>
<img :src="item.cover" width="44" />
</template>
</f7-list-item>
<f7-block-footer>
<p>Just pull page down to let the magic happen.<br>Note that pull-to-refresh feature is optimised for touch and native scrolling so it may not work on desktop browser.</p>
</f7-block-footer>
</f7-list>
</f7-page>
</template>
<script>
export default {
data() {
return {
items: [
{
title: 'Yellow Submarine',
author: 'Beatles',
cover: 'https://cdn.framework7.io/placeholder/abstract-88x88-1.jpg',
},
{
title: 'Don\'t Stop Me Now',
author: 'Queen',
cover: 'https://cdn.framework7.io/placeholder/abstract-88x88-2.jpg',
},
{
title: 'Billie Jean',
author: 'Michael Jackson',
cover: 'https://cdn.framework7.io/placeholder/abstract-88x88-3.jpg',
},
],
songs: ['Yellow Submarine', 'Don\'t Stop Me Now', 'Billie Jean', 'Californication'],
authors: ['Beatles', 'Queen', 'Michael Jackson', 'Red Hot Chili Peppers'],
};
},
methods: {
loadMore(done) {
const self = this;
setTimeout(() => {
const picURL = `https://cdn.framework7.io/placeholder/abstract-88x88-${(Math.floor(Math.random() * 10) + 1)}.jpg`;
const song = self.songs[Math.floor(Math.random() * self.songs.length)];
const author = self.authors[Math.floor(Math.random() * self.authors.length)];
self.items.push({
title: song,
author,
cover: picURL,
});
done();
}, 1000);
},
},
}
</script>