ページVueコンポーネント

    Framework7のページは、Webページを考えるときと同じ意味を持っています。ページは、コンテンツを表示・操作するための主要なコンポーネントです。

    Page Vueコンポーネントは、Framework7のPageを表しています。

    ページのコンポーネント

    以下のコンポーネントが含まれています。

    • f7-page - メインのページ要素
    • f7-page-content - 追加のインナーページコンテンツ要素

    ページのプロパティ

    PropTypeDefaultDescription
    <f7-page> properties
    namestringページ名
    stackedbooleanすべてのページをDOM内に保持するstackedPages ルータパラメータを使用している場合、現在アクティブでないページに対して有効です。
    messages-contentbooleanMessagesコンポーネントを使用して、必要な追加スタイリングを追加する場合に有効です。
    page-contentbooleantrue有効にすると、内部に page-content 要素が自動的に追加されます。タブ用の page-content 要素が少ない場合は無効にするのが便利です。
    tabsbooleanページを Tabs のラッパーとして使用している場合に有効にします。
    login-screenbooleanページ内で ログイン画面 を使用して必要な追加スタイリングを行う場合に有効にする
    no-swipebackboolean現在のページのスワイプバック機能を無効にする (iOSテーマのみに影響)
    with-subnavbarbooleanページ内にSub Navbarがある場合に有効にする
    no-navbarboolean共通のナビバーレイアウトを使用していて、このページで共通のナビバーを隠す(または別のものを使用する)必要がある場合に有効にする(iOSテーマにのみ影響します)。
    no-toolbarboolean一般的なツールバー/タブバーのレイアウトを使用していて、このページでツールバーを隠す必要がある場合に有効にする(または別のものを使用する
    hide-bars-on-scrollbooleanページスクロール時にナビバーとツールバーを隠す
    hide-navbar-on-scrollbooleanページスクロール時にナビバーを隠す
    hide-toolbar-on-scrollbooleanページ スクロール時にツールバーを隠す
    ptrbooleanPull To Refreshを有効にします。
    ptr-distancenumberカスタムの更新時のトリガーの距離を指定します。デフォルトでは(指定されていない場合)、44pxです。
    ptr-preloaderbooleantrueカスタム・プル・トゥ・リフレッシュ・プリローダー要素を使用したい場合は無効にしてください。
    ptr-bottombooleanfalse下からの更新を有効にする
    ptr-mousewheelbooleanfalseマウスホイールでの更新を有効にする(デスクトップアプリの場合)。PTRトップでのみ動作します。
    infinitebooleanInfinite Scrollを有効にする
    infinite-topbooleanページ上部の無限スクロールを有効にする
    infinite-distancenumber無限スクロールイベントを発生させるためのページ下部からの距離(px)を指定します。デフォルトでは(指定されていない場合)、50(px)です。
    infinite-preloaderbooleantrueカスタム無限スクロール・プリローダーを使用する場合は無効にします。
    <f7-page-content> properties
    tabbooleanpage-contentをTabとして使用している場合は有効
    tab-activeboolean現在のタブがアクティブな場合に有効
    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
    ` のプロパティと同じです。

    ページイベント

    EventDescription
    <f7-page> events
    page:mountedkeepAlive` ルートを持つページが DOM にマウント/アタッチされると、イベントが発生します。
    page:initFramework7が必要なページのコンポーネントとナビバーを初期化した後にイベントが発生します。
    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>