色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

HarmonyOS開發案例:【購物APP】

jf_46214456 ? 來源:jf_46214456 ? 作者:jf_46214456 ? 2024-04-24 20:47 ? 次閱讀

介紹

本篇Codelab使用常用組件、頁面路由router實現購物應用,包含以下功能:

  1. 使用toolbar、toolbar-item組件實現“首頁”,“新品”,“購物車”,“我的”頁面切換。
  2. 使用list組件,展示購物車里的商品
  3. 使用swiper組件,實現圖片自動輪播。
  4. 使用panel組件,展示商品規格
  5. 使用自定義組件,提高代碼的可讀性。

相關概念

  • [swiper]:滑動容器,提供切換子組件顯示的能力。
  • [input]:交互式組件,包括單選框,多選框,按鈕和單行文本輸入框。
  • [search]:搜索框組件,用于提供用戶搜索內容的輸入區域。
  • [toolbar]:工具欄。放在界面底部,用于展示針對當前界面的操作選項。
  • [toolbar-item]:工具欄[toolbar]子組件。 用于展示工具欄上的一個操作選項。
  • [自定義組件]:自定義組件是用戶根據業務需求,將已有的組件組合,封裝成的新組件,可以在工程中多次調用,從而提高代碼的可讀性。

環境搭建

軟件要求

  • [DevEco Studio]版本:DevEco Studio 3.1 Release及以上版本。
  • OpenHarmony SDK版本:API version 9及以上版本。

硬件要求

  • 開發板類型:[潤和RK3568開發板]。
  • OpenHarmony系統:3.2 Release及以上版本。

環境搭建

完成本篇Codelab我們首先要完成開發環境的搭建,本示例以RK3568開發板為例,參照以下步驟進行:

  1. [獲取OpenHarmony系統版本]:標準系統解決方案(二進制)。以3.2 Release版本為例:
  2. 搭建燒錄環境。
    1. [完成DevEco Device Tool的安裝]
    2. [完成RK3568開發板的燒錄]
  3. 搭建開發環境。
    1. 開始前請參考[工具準備],完成DevEco Studio的安裝和開發環境配置。
    2. 開發環境配置完成后,請參考[使用工程向導]創建工程(模板選擇“Empty Ability”)。
    3. 工程創建完成后,選擇使用[真機進行調測]。
    4. 鴻蒙開發指導文檔:[gitee.com/li-shizhen-skin/harmony-os/blob/master/README.md]

搜狗高速瀏覽器截圖20240326151450.png

代碼結構解讀

本篇Codelab只對核心代碼進行講解,對于完整代碼,我們會在【gitee.com/li-shizhen-skin/harmony-os/blob/master/README.md】中提供。由于本篇Codelab頁面較多,因此component和pages目錄下只展示“購物主頁面”的hml、js、css。

`HarmonyOS與OpenHarmony鴻蒙文檔籽料:mau123789是v直接拿`

├──entry/src/main/js	             // 代碼區
│  └──MainAbility
│     ├──common
│     │  ├──constant
│     │  │  └──commonConstants.js    // 公共常量類
│     │  └──images                   // 圖片區
│     ├──component
│     │  ├──backComponent            // 后退子組件
│     │  ├──commonButton             // 支付按鈕子組件
│     │  ├──commonToolbar            // 導航欄子組件
│     │  ├──home                     // 購物主頁子組件
│     │  ├──likedCards               // 猜你喜歡卡片子組件
│     │  ├──myInfo                   // 我的子組件
│     │  ├──newProduct               // 新品子組件
│     │  ├──orderReusableCom         // 用戶商品信息子組件
│     │  ├──productBuyInfo           // 購買商品卡片子組件
│     │  ├──shoppingCart             // 購物車子組件
│     │  └──subtitle                 // 副標題子組件
│     ├──i18n
│     │  ├──en-US.json               // 英文國際化			
│     │  └──zh-CN.json               // 中文國際化	
│     ├──pages
│     │  ├──allOrders                // 全部訂單頁
│     │  ├──homePage                 // 購物主頁
│     │  │  ├──homePage.css          // 購物主頁面樣式
│     │  │  ├──homePage.hml          // 購物主頁面
│     │  │  └──homePage.js           // 購物主頁面邏輯
│     │  ├──launchPage               // 啟動頁
│     │  ├──pendingPayment           // 待支付頁
│     │  ├──productDetails           // 產品詳情頁
│     │  └──sureOrder                // 確定訂單頁
│     └──app.js                      // 程序入口
└──entry/src/main/resources          // 應用資源目錄

構建購物應用首頁

本篇Codelab選取購物應用的主頁面、購物車頁面、以及導航欄進行詳細的講解,對于完整代碼,可在gitee源碼中進行查看。

購物應用的主頁面主要由界面底部導航欄和導航欄上的內容組成。效果如圖所示:

< !-- homePage.hml -- >
< element name="home" src="http://www.1cnz.cn/images/chaijie_default.png" >< /element >
< element name="new-product" src="http://www.1cnz.cn/images/chaijie_default.png" >< /element >
< element name="shopping-cart" src="http://www.1cnz.cn/images/chaijie_default.png" >< /element >
< element name="my-info" src="http://www.1cnz.cn/images/chaijie_default.png" >< /element >
< element name="common-toolbar" src="http://www.1cnz.cn/images/chaijie_default.png" >< /element >

< div class="container" >
    < !-- 主頁面 -- >
    < home if="{{ tag === homePageIndex }}" >< /home >

    < !-- 新品頁面 -- >
    < new-product if="{{ tag === newProductIndex }}" >< /new-product >

    < !-- 購物車頁面 -- >
    < shopping-cart if="{{ tag === shoppingCartIndex }}" >< /shopping-cart >

    < !-- 我的頁面 -- >
    < my-info if="{{ tag === myInfoIndex }}" >< /my-info >

    < !-- 導航欄 -- >
    < common-toolbar tag="{{ tag }}" @switch-toolbar="switchToolbar" >< /common-toolbar >
< /div >

底部導航欄:由“主頁”、“新品”、“購物車”以及“我的”頁面組成,點擊導航欄內容,展示所點擊模塊的內容。

// homePage.js
import CommonConstants from '../../common/constant/commonConstants';

export default {
  data: {
    // 頁面默認展示主頁,tag是主頁面的索引
    tag: 1,
    // 主頁面索引
    homePageIndex: CommonConstants.HOME_PAGE_INDEX,
    // 新品頁面索引
    newProductIndex: CommonConstants.NEW_PRODUCT_INDEX,
    // 購物車頁面索引
    shoppingCartIndex: CommonConstants.SHOPPING_CART_INDEX,
    // 我的頁面索引
    myInfoIndex: CommonConstants.MY_INFO_INDEX
  },

  /**
   * 切換導航欄內容
   *
   * @param value 子組件傳過來的索引
   */
  switchToolbar(value) {
    this.tag = value.detail.index;
  }
}

子組件:導航欄的使用

導航欄由“主頁”、“新品”、“購物車”以及“我的”組成,點擊導航欄對應的子組件,頁面會展示對應模塊的內容。效果如圖所示:

在父組件homePage.hml中使用@switch-toolbar="switchToolbar"綁定子組件的事件,用于接收子組件傳過來的索引,通過if判斷,從而展示索引對應的頁面。

 !-- homePage.hml -- >
...
 div class="container" >
     !-- 主頁面 -- >
     home if="{{ tag === homePageIndex }}" > /home >

     !-- 新品頁面 -- >
     new-product if="{{ tag === newProductIndex }}" > /new-product >

     !-- 購物車頁面 -- >
     shopping-cart if="{{ tag === shoppingCartIndex }}" > /shopping-cart >

     !-- 我的頁面 -- >
     my-info if="{{ tag === myInfoIndex }}" > /my-info >

     !-- 導航欄 -- >
     common-toolbar tag="{{ tag }}" @switch-toolbar="switchToolbar" > /common-toolbar >
 /div >

 !-- commonToolbar.hml -- >
 div class="container" >
     toolbar class="toolbar" >
         toolbar-item value="{{ $t(toolbarName.home) }}" @click="switchToolbar(homePageIndex)"
                      icon="{{ tag === homePageIndex ? commonIcon.home : commonIcon.homeDisable }}" >
         /toolbar-item >
         toolbar-item value="{{ $t(toolbarName.newProduct) }}" @click="switchToolbar(newProductIndex)"
                      icon="{{ tag === newProductIndex ? commonIcon.newProduct : commonIcon.newProductDisable }}" >
         /toolbar-item >
         toolbar-item value="{{ $t(toolbarName.shoppingCart) }}" @click="switchToolbar(shoppingCartIndex)"
                      icon="{{ tag === shoppingCartIndex ? commonIcon.shoppingCart : commonIcon.shoppingCartDisable }}" >
         /toolbar-item >
         toolbar-item value="{{ $t(toolbarName.me) }}" @click="switchToolbar(myInfoIndex)"
                      icon="{{ tag === myInfoIndex ? commonIcon.me : commonIcon.meDisable }}" >
         /toolbar-item >
     /toolbar >
 /div >

在子組件commonToolbar.js中通過this.$emit('switchToolbar', {info: value})觸發事件并向上傳遞參數,homePage.js中的switchToolbar方法接收子組件傳過來的索引。在子組件commonToolbar.js文件中定義props,props用于組件之間的數據通信,當父組件中的tag發生變化的時候,子組件也會隨之響應,然后改變toolbar-item中icon的顏色。

// homePage.js
import CommonConstants from '../../common/constant/commonConstants';

export default {
  data: {
    // 頁面默認展示主頁,tag是主頁面的索引
    tag: 1,
    ...
  },

  /**
   * 切換導航欄內容
   *
   * @param value 子組件傳過來的索引
   */
  switchToolbar(value) {
    this.tag = value.detail.index;
  }
}

// commonToolbar.js
import CommonConstants from '../../common/constant/commonConstants';

export default {
  props: ['tag'],
  data: {
    commonIcon: CommonConstants.COMMON_TOOLBAR_ICON,
    toolbarName: CommonConstants.COMMON_TOOLBAR_NAME,
    // 主頁面索引
    homePageIndex: CommonConstants.HOME_PAGE_INDEX,
    // 新品頁面索引
    newProductIndex: CommonConstants.NEW_PRODUCT_INDEX,
    // 購物車頁面索引
    shoppingCartIndex: CommonConstants.SHOPPING_CART_INDEX,
    // 我的頁面索引
    myInfoIndex: CommonConstants.MY_INFO_INDEX
  },

  /**
   * 向父組件傳值
   *
   * @param index 選中子模塊的索引
   */
  switchToolbar(index) {
    this.$emit('switchToolbar', {
      index: index
    });
  }
}

構建購物車頁面

購物車頁面由頂部標題欄、購物車商品列表、猜你喜歡的商品列表三部分組成,并以子組件的形式顯示在主頁面中。其中,購物車商品列表使用list組件和for循環,實現對多條商品數據進行展示。猜你喜歡的商品列表是通過引用自定義組件實現的。效果如圖所示:

< !-- shoppingCart.hml -- >
< element name="liked-cards" src="../../component/likedCards/likedCards.hml" >< /element >

< div class="container" >
    < div class="top" >
        < !-- 頂部導航標題欄 -- >
        < div class="top-title" >
            < text class="shopping-cart" >{{ $t('strings.shopping_cart') }}< /text >
            < text class="edit" >{{ $t('strings.edit') }}< /text >
        < /div >
        < !-- 購物車商品列表 -- >
        < div class="top-list" >
            < div class="list-title" >
                < input class="all-checkbox" type="checkbox" checked="{{ isAllSelect }}" @change="checkboxOnChange" >
                < /input >
                < image class="my-icon-size" src="{{ person }}" >< /image >
                < text class="mall-self-operated" >{{ $t('strings.mall_self_operated') }}< /text >
            < /div >
            < list class="list" >
                < list-item for="{{ (index, item) in shoppingListData }}" class="list-item" >
                    < div class="list-content" >
                        < input class="checkbox" type="checkbox" checked="{{ item.isSelect }}" >< /input >
                        < image class="product-pictures" src="{{ item.image }}" >< /image >
                        < div class="box-content" >
                            < text class="product-title" >{{ $t(item.title) }}< /text >
                            < text class="product-subtitle" >{{ $t(item.subtitle) }}< /text >
                            < div class="content-price" >
                                < text class="product-price" >{{ item.price }}< /text >
                                < div class="price-num" >
                                    < image class="my-icon-size" @click="subtractNum(index)" src="http://www.1cnz.cn/images/chaijie_default.png" >
                                    < /image >
                                    < text class="product-num" >{{ item.num }}< /text >
                                    < image class="my-icon-size" src="{{ commonIcon.increaseIcon }}"
                                           @click="addNum(index)" >
                                    < /image >
                                < /div >
                            < /div >
                        < /div >
                    < /div >
                < /list-item >
            < /list >
        < /div >
    < /div >
    < !-- 猜你喜歡商品列表 -- >
    < div class="middle-card" >
        < liked-cards >< /liked-cards >
    < /div >
< /div >
  • 點擊“商品自營”頭像前的多選框,會觸發checkboxOnChange()方法,頁面會勾選/不勾選購物車的中所有商品。
  • 點擊“+”按鈕會觸發addNum()方法,增加單件商品的數量。
  • 點擊“-”按鈕會觸發subtractNum()方法,減少單件商品的數量。
// shoppingCart.js
import CommonConstants from '../../common/constant/commonConstants';

export default {
  data: {
    isAllSelect: false,
    shoppingListData: CommonConstants.SHOPPING_LIST_DATA,
    commonIcon: CommonConstants.SHOPPING_CART_ICON,
    person: CommonConstants.COMMON_ICON.person
  },

  /**
   * 購物車商品全選/非全選
   */
  checkboxOnChange() {
    this.isAllSelect = !this.isAllSelect;
    this.shoppingListData.filter((item) = > {
      item.isSelect = this.isAllSelect;
    });
  },

  /**
   * 勾選單個商品
   *
   * @param subscript 選中商品的索引
   * @param event 單選框事件
   */
  singleAnswer(subscript, event) {
    // 修改商品的選擇狀態
    this.shoppingListData.forEach((item, index) = > {
      if (index === subscript) {
        item.isSelect = event.checked;
      }
    })
    // 檢查購物車中的所有商品是否都被選中
    let selectAll = this.shoppingListData.every(item = > item.isSelect === true);
    if (selectAll === true) {
      this.isAllSelect = true;
    } else {
      this.isAllSelect = false;
    }
  },

  /**
   * 減少商品數量邏輯
   *
   * @param value 當前商品的數量
   */
  subtractNum(value) {
    if (this.shoppingListData[value].num > 0) {
      this.shoppingListData[value].num--;
    }
  },

  /**
   * 增加商品數量邏輯
   *
   * @param value 當前商品的數量
   */
  addNum(value) {
    this.shoppingListData[value].num++;
  }
}

審核編輯 黃宇

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 鴻蒙
    +關注

    關注

    57

    文章

    2365

    瀏覽量

    42896
  • OpenHarmony
    +關注

    關注

    25

    文章

    3727

    瀏覽量

    16384
收藏 人收藏

    評論

    相關推薦

    HarmonyOS開發案例:【購物app

    OpenHarmony ArkUI框架提供了豐富的動畫組件和接口,開發者可以根據實際場景和開發需求,選用豐富的動畫組件和接口來實現不同的動畫效果。
    的頭像 發表于 05-14 18:19 ?1087次閱讀
    <b class='flag-5'>HarmonyOS</b><b class='flag-5'>開發案</b>例:【<b class='flag-5'>購物</b>車<b class='flag-5'>app</b>】

    HarmonyOS IoT 硬件開發案例分享

    ``許思維老師HiSpark Wi-Fi IoT 開發案例分享:案例一:AHT20溫濕度傳感器開發、調試;案例二:oled屏驅動庫移植,調試;案例三:用OLED屏播放視頻,Wi-Fi 和 TCP/IP 綜合應用。 ``
    發表于 10-27 17:30

    HarmonyOS開發跨設備的鴻蒙(HarmonyOSApp

    是圓形(如智能手表),這就給開發App帶來了麻煩。現在幾乎每一個智能設備廠商,如Apple、華為都面臨這個問題。這就要求我們開發App盡可能適合更多的智能設備。當然,最簡單,最直接的
    發表于 11-02 15:18

    HarmonyOS開發跨設備的鴻蒙(HarmonyOSApp

    手表),這就給開發App帶來了麻煩。現在幾乎每一個智能設備廠商,如Apple、華為都面臨這個問題。這就要求我們開發App盡可能適合更多的智能設備。當然,最簡單,最直接的方式是為每一類
    發表于 11-03 16:54

    如何優雅地開發HarmonyOS APP應用

    ` 本帖最后由 軟通動力HOS 于 2021-3-10 15:29 編輯 研究HarmonyOS有一段時間了,今天主要結合自己多年的項目開發經驗和各種技術棧結合HarmonyOS APP
    發表于 03-10 15:13

    【潤和直播課預告@華為開發者學院】HarmonyOS設備開發基礎課程|HiSpark WiFi-IoT 智能小車套件開發案

    `【潤和直播課預告@華為開發者學院】HarmonyOS設備開發基礎課程|HiSparkWiFi-IoT 智能小車套件開發案例,3月18日(周四) 19:00-21:00,讓你的
    發表于 03-16 15:01

    【基于HarmonyOS開發購物應用】AnBetter Codelab第二期記錄帖

    功能介紹使用UI組件開發出一個HarmonyOS購物應用。HarmonyOS開發者提供了多種組件,每個組件通過對數據和方法的簡單封裝,實現
    發表于 04-17 00:55

    【基于HarmonyOS開發購物應用】jack_606 Codelab第二期記錄帖

    `目標:基于HarmonyOS開發購物應用1.安裝DevEco Studio開發工具并配置好環境2.參考https://github.com/huaweicodelabs
    發表于 04-17 13:33

    【基于HarmonyOS開發購物應用】SetllatWood Codelab第二期記錄帖

    【基于HarmonyOS開發購物應用】SetllatWood Codelab第二期記錄帖圖片在附件
    發表于 04-21 14:44

    戈帥 開發HarmonyOS APP《拼夕夕》演示

    戈帥 開發HarmonyOS APP《拼夕夕》演示
    發表于 08-28 17:39

    使用JS實現一款簡單的HarmonyOS購物應用

    1. 介紹本篇Codelab將會使用UI組件開發出一個HarmonyOS購物應用。HarmonyOS開發者提供了多種組件,每個組件通過對數
    發表于 09-23 10:40

    harmonyOS開發APP如何訪問Webservice?

    我接到一個項目,需要用到HarmonyOS開發APP做為移動手機查詢和收到報警數據,具體是這樣的,在C/S加B/S的系統框架下我們有數據庫服務器和Web服務器,有widows桌面應用和Web瀏覽器
    發表于 03-28 10:14

    App開發案例教程PDF電子書免費下載

    App開發案例教程》通過一個實例,介紹App設計、開發直至上線的全過程,引導讀者在較短時間內熟悉一個較大規模的App應用系統的
    發表于 08-05 08:00 ?38次下載
    <b class='flag-5'>App</b><b class='flag-5'>開發案</b>例教程PDF電子書免費下載

    許思維老師HarmonyOS IoT硬件開發案例分享

    許思維老師HiSpark Wi-Fi IoT 開發案例分享:案例一:AHT20溫濕度傳感器開發、調試;案例二:oled屏驅動庫移植,調試;案例三:用OLED屏播放視頻,Wi-Fi 和 TCP/IP 綜合應用。
    發表于 10-29 10:39 ?39次下載
    許思維老師<b class='flag-5'>HarmonyOS</b> IoT硬件<b class='flag-5'>開發案</b>例分享

    華為開發者分論壇HarmonyOS學生公開課-OpenHarmony Codelabs開發案

    2021華為開發者分論壇HarmonyOS學生公開課-OpenHarmony Codelabs開發案
    的頭像 發表于 10-24 11:25 ?1929次閱讀
    華為<b class='flag-5'>開發</b>者分論壇<b class='flag-5'>HarmonyOS</b>學生公開課-OpenHarmony Codelabs<b class='flag-5'>開發案</b>例
    主站蜘蛛池模板: 福利社影院| 在线视频中文字幕| 亚洲免费无码中文在线| gogo免费在线观看| 久久综合电影| 长泽梓黑人初解禁bdd07| 国产婷婷色综合AV蜜臀AV| 日日噜噜夜夜狠狠扒开双腿| chinese野外男女free| 嗯啊不要老师| 99久久亚洲精品日本无码| 免费韩伦影院在线观看| 一区二区乱子伦在线播放| 久久99国产综合精品AV蜜桃| 一个人看的www视频动漫版| 黄色一级毛片免费| 亚洲欧美视频在线| 久九九精品免费视频| 在线观看中文字幕国产| 免费乱理伦片在线观看八戒| 99久视频只有精品2019| 欧美成人一区二免费视频| YY8848高清私人影院| 日本午夜精品一区二区三区电影| 99久久国产宗和精品1上映| 欧美fxxx| 动漫女生的逼| 驯服有夫之妇HD中字日本| 狠狠色丁香久久婷婷综合_中| 一久久| 嫩小幼处在线| 国产AV高清怡春院| 亚洲欧美国产视频| 某上海少妇3P黑人完整版BD| 成人永久免费视频| 亚洲精品卡2卡3卡4卡5卡区| 麻豆国产99在线中文| 俄罗斯雏妓的BBB孩交| 亚洲精品久久久久AV无码| 久久婷婷丁香五月色综合啪免费| caoporn 超碰在线视频|