>  기사  >  웹 프론트엔드  >  uniapp은 다른 여러 TabBar 페이지의 사전 로드를 어떻게 구현합니까?

uniapp은 다른 여러 TabBar 페이지의 사전 로드를 어떻게 구현합니까?

PHPz
PHPz원래의
2023-04-20 15:08:063243검색

최근 몇 년 동안 모바일 애플리케이션은 사람들의 삶에 필수적인 부분이 되었습니다. 모바일 애플리케이션이 개발됨에 따라 점점 더 많은 애플리케이션이 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을 정의하는 preload 필드를 추가하세요.

{
  "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의 onLoad 메서드에서 uni.request를 사용하여 카테고리, 장바구니 및 데이터를 가져옵니다. 나 페이지는 로컬로 캐시됩니다.

TabBar 메뉴 항목을 클릭하면 메뉴 항목의 색인을 기반으로 해당 페이지 URL을 얻고 페이지가 로컬에 캐시되었는지 확인합니다. 캐시된 경우 캐시에서 데이터를 직접 읽고 페이지가 렌더링됩니다. 캐시되지 않은 경우 GET 요청을 보내 데이터를 가져오고 로컬로 캐시한 다음 페이지를 렌더링합니다.

위는 Uniapp에서 다른 TabBar 페이지를 미리 로드하는 방법입니다. 페이지를 미리 로드하면 사용자가 TabBar 메뉴 항목을 클릭하여 페이지를 전환할 때 해당 페이지를 빠르게 표시할 수 있어 사용자 경험이 향상됩니다.

위 내용은 uniapp은 다른 여러 TabBar 페이지의 사전 로드를 어떻게 구현합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.