ホームページ >ウェブフロントエンド >uni-app >uniapp は他のいくつかの TabBar ページのプリロードをどのように実装しますか?

uniapp は他のいくつかの TabBar ページのプリロードをどのように実装しますか?

PHPz
PHPzオリジナル
2023-04-20 15:08:063370ブラウズ

近年、モバイル アプリケーションは人々の生活に欠かせないものになりました。モバイル アプリケーションの開発に伴い、TabBar デザインを採用するアプリケーションがますます増えており、特にアプリでは、TabBar が多くのアプリケーションの主要なナビゲーション方法となっています。その中でもUniappフレームワークは現在最も普及している軽量クロスプラットフォーム開発フレームワークと言えます。ただし、多くの開発者は、Uniapp を使用して TabBar アプリケーションを開発するときに、「他のいくつかの TabBar ページをプリロードするにはどうすればよいですか?」という共通の問題に遭遇するでしょう。

Uniapp の開発プロセス中に、pages.json でページを構成することで TabBar を作成できます。たとえば、pages.json で次のページを定義します。

{
  "pages": [
    {
      "path": "pages/index/index",
      "style": {}
    },
    {
      "path": "pages/category/category",
      "style": {}
    },
    {
      "path": "pages/cart/cart",
      "style": {}
    },
    {
      "path": "pages/me/me",
      "style": {}
    }
  ],
  "tabBar": {
    "color": "#999999",
    "selectedColor": "#000000",
    "backgroundColor": "#ffffff",
    "borderStyle": "black",
    "list": [
      {
        "pagePath": "pages/index/index",
        "text": "首页",
        "iconPath": "static/tabbar/home.png",
        "selectedIconPath": "static/tabbar/home_active.png"
      },
      {
        "pagePath": "pages/category/category",
        "text": "分类",
        "iconPath": "static/tabbar/category.png",
        "selectedIconPath": "static/tabbar/category_active.png"
      },
      {
        "pagePath": "pages/cart/cart",
        "text": "购物车",
        "iconPath": "static/tabbar/cart.png",
        "selectedIconPath": "static/tabbar/cart_active.png"
      },
      {
        "pagePath": "pages/me/me",
        "text": "我的",
        "iconPath": "static/tabbar/me.png",
        "selectedIconPath": "static/tabbar/me_active.png"
      }
    ]
  }
}

この構成ファイルでは、4 つのページを定義し、TabBar を作成します。このうち、各ページは TabBar のメニュー項目に対応します。さまざまなメニュー項目をクリックすると、Uniapp は対応するページにジャンプします。

ただし、このプロセスでは、Uniapp は現在のページが読み込まれるときにのみプリロードし、他のページはプリロードしません。したがって、ある TabBar ページから別の TabBar ページに切り替えると、ページの読み込みが遅くなり、ユーザー エクスペリエンスに影響を与える可能性があります。では、この問題をどうやって解決すればよいでしょうか?

他の TabBar ページをプリロードする方法:

Uniapp では、uni.request を使用して他の TabBar ページをプリロードできます。このメソッドは、GETリクエストを送信することで指定したページのデータを取得し、そのデータをキャッシュすることができます。対応する TabBar メニュー項目をクリックすると、システムはまずデータがキャッシュに存在するかどうかを確認します。キャッシュに存在する場合は、データを直接表示します。存在しない場合は、再度リクエストを送信してキャッシュします。データ。

pages.json で、プリロード フィールドを追加して、プリロードする必要があるページ URL を定義します。

{
  "pages": [
    {
      "path": "pages/index/index",
      "style": {}
    },
    {
      "path": "pages/category/category",
      "style": {},
      "preload": true
    },
    {
      "path": "pages/cart/cart",
      "style": {},
      "preload": true
    },
    {
      "path": "pages/me/me",
      "style": {},
      "preload": true
    }
  ],
  "tabBar": {
    ...
  }
}

上記の構成ファイルでは、カテゴリ、カート、および自分ページの新しいフィールドを追加します。 . preload 属性を追加し、true に設定しました。これは、アプリのホームページが読み込まれると、Uniapp がこれらのページを自動的に読み込み、ローカルにキャッシュすることを意味します。

次に、App.vue で uni.request を呼び出して、ページのプリロード関数を実装します。

<template>
  <div class="app">
    <uni-tab-bar :list="tabBar.list" :color="tabBar.color" :selected-color="tabBar.selectedColor" :background-color="tabBar.backgroundColor" :border-style="tabBar.borderStyle" @change="onTabChange"></uni-tab-bar>
  </div>
</template>

<script>
export default {
  data() {
    return {
      tabBar: uni.getStorageSync('tabBar') || {
        color: '#999999',
        selectedColor: '#000000',
        backgroundColor: '#ffffff',
        borderStyle: 'black',
        list: []
      },
      currentTab: 0
    }
  },
  onLoad() {
    uni.request({
      url: '/pages/me/me',
      method: 'GET',
      success: (res) => {
        uni.setStorageSync('/pages/me/me', res.data)
      }
    })
    uni.request({
      url: '/pages/cart/cart',
      method: 'GET',
      success: (res) => {
        uni.setStorageSync('/pages/cart/cart', res.data)
      }
    })
    uni.request({
      url: '/pages/category/category',
      method: 'GET',
      success: (res) => {
        uni.setStorageSync('/pages/category/category', res.data)
      }
    })
  },
  methods: {
    onTabChange(e) {
      const url = this.tabBar.list[e.index].pagePath
      this.currentTab = e.index
      uni.setStorageSync('currentTab', e.index)
      let pageData = uni.getStorageSync(url)
      if (!pageData) {
        uni.showLoading()
        // 发送请求获取数据
        uni.request({
          url: url,
          method: 'GET',
          success: (res) => {
            uni.hideLoading()
            pageData = res.data
            // 将获取的数据缓存到本地
            uni.setStorageSync(url, pageData)
          }
        })
      }
    }
  }
}
</script>

上記のコードでは、App.vue .request の onLoad メソッドで uni を渡します。カテゴリ、カート、自分ページのデータを取得し、ローカルにキャッシュします。

TabBar メニュー項目がクリックされると、メニュー項目のインデックスに基づいて対応するページ URL を取得し、ページがローカルにキャッシュされているかどうかを確認します。キャッシュされている場合は、データがキャッシュから直接読み取られてページがレンダリングされます。キャッシュされていない場合は、GET リクエストが送信されてデータを取得し、ローカルにキャッシュされてからページがレンダリングされます。

上記は、Uniapp で他の TabBar ページをプリロードする方法です。ページをプリロードすることで、ユーザーが TabBar メニュー項目をクリックしてページを切り替えたときに、対応するページをすばやく表示できるため、ユーザー エクスペリエンスが向上します。

以上がuniapp は他のいくつかの TabBar ページのプリロードをどのように実装しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。