在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

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

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

3天內不再提示

HarmonyOS開發實例:【自定義Emitter】

jf_46214456 ? 來源:jf_46214456 ? 作者:jf_46214456 ? 2024-04-14 11:37 ? 次閱讀

介紹

本示例使用[Emitter]實現事件的訂閱和發布,使用[自定義彈窗]設置廣告信息

效果預覽

image.png

使用說明

  1. 進入首頁后彈出廣告彈窗,點擊即可關閉。
  2. 點擊商品列表中的一個商品可以跳轉到商品詳情頁。
  3. 在商品詳情頁點擊首頁可以返回到商品列表頁,點擊購物車可以跳轉到購物車頁面,點擊加入購物車可以在購物車頁面添加一條商品信息,點擊立即購買可以增加一次已購物數量顯示在購物車頁面。
  4. 在購物車頁面點擊購物車列表內商品的減號圖標,可以將此商品信息從購物車列表內刪除,點擊清空購買數量可以將已購物數量清空、顯示為0。
  5. 鴻蒙開發文檔參考:[qr23.cn/AKFP8k]

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

代碼解析

HarmonyOS&OpenHarmony文檔紫料添加v
mau123789直接拿取

entry/src/main/ets/
|---components
|   |---BottomNavigation.ets                    // 底部按鈕導航欄
|   |---Choice.ets                              // 商品規格選擇
|   |---EventsDialog.ets                        // 廣告彈窗
|   |---Information.ets                         // 詳細信息頁面
|   |---Valueation.ets                          // 價格頁面
|---mock
|   |---DetailData.ets                          // 商品詳情數據
|   |---ProductsData.ets                        // 產品列表數據
|---model
|   |---DetailMode.ets                          // 商品詳情數據結構
|   |---GoodsModel.ets                          // 商品數據結構
|---pages
|   |---Detail.ets                              // 商品詳情
|   |---Index.ets                               // 首頁
|   |---ShopCart.ets                            // 購物車
|---shoppingCart
|   |---Cart.ets                                // 購物車
|   |---FavorGoodlist.ets                       // 推薦列表
|---util
|   |---Logger.ets                              // 日志工具
feature/emitter/src/main/ets/
|---common
|   |---EmitterConst.ts                         // 事件通知常量
|---components
|   |---feature
|   |   |---CustomEmitter.ets                   // 封裝事件通知類

具體實現

  • 訂閱事件通知在CustomEmitter中實現,源碼參考[CustomEmitter.ets]
/*

 * Copyright (c) 2022 Huawei Device Co., Ltd.

 * Licensed under the Apache License, Version 2.0 (the "License");

 * you may not use this file except in compliance with the License.

 * You may obtain a copy of the License at

 *

 *     http://www.apache.org/licenses/LICENSE-2.0

 *

 * Unless required by applicable law or agreed to in writing, software

 * distributed under the License is distributed on an "AS IS" BASIS,

 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

 * See the License for the specific language governing permissions and

 * limitations under the License.

 */



import emitter from '@ohos.events.emitter';

import { EmitterConst } from '../../common/EmitterConst';

import Base from '@ohos.base';



class GoodsListInner {

  id: number = 0

}



class GoodsList {

  data: GoodsListInner = {

    id: 0

  }

}



export class CustomEmitter {

  shoppingCartGoodsList: GoodsList[] = [];



  // 單次訂閱回調

  public showEventsDialog(callback: Base.Callback< emitter.EventData >) {

    let dialogShowEventsId: emitter.InnerEvent = {

      eventId: EmitterConst.DIALOG_EVENT_ID

    };

    let dialogShowEventsData: emitter.EventData = {

      data: {

        id: EmitterConst.DIALOG_EVENT_ID,

      }

    };

    // 單次訂閱事件--廣告

    emitter.once(dialogShowEventsId, callback);

    // 事件發布

    emitter.emit(dialogShowEventsId, dialogShowEventsData);

  }



  // 單次訂閱回調(eventId為string類型)

  public closeEventsDialog(callback: Base.Callback< emitter.EventData >) {

    let dialogCloseEventsData: emitter.EventData = {

      data: {

        id: EmitterConst.CLOSE_DIALOG_EVENT_ID

      }

    };

    // 單次訂閱事件--關閉廣告

    emitter.once(EmitterConst.CLOSE_DIALOG_EVENT_ID, callback);

    // 事件發布

    emitter.emit(EmitterConst.CLOSE_DIALOG_EVENT_ID, dialogCloseEventsData);

  }



  // 持久化訂閱的事件回調

  public setShoppingCartGoodsList(callback: (eventData: emitter.EventData) = > void) {

    let addGoodDataId: emitter.InnerEvent = {

      eventId: EmitterConst.ADD_EVENT_ID

    };

    // 以持久化方式訂閱購物車添加事件并接收事件回調

    emitter.off(EmitterConst.ADD_EVENT_ID);



    emitter.on(addGoodDataId, (eventData: emitter.EventData) = > {

      callback(eventData);

    });

  }



  // 持久化訂閱的事件回調(eventId為string類型)

  public deleteShoppingCartGoodsList(callback: (eventData: emitter.EventData) = > void) {

    // 以持久化方式訂閱購物車刪除事件并接收事件回調

    emitter.off(EmitterConst.DELETE_EVENT_ID);

    emitter.on(EmitterConst.DELETE_EVENT_ID, (eventData: emitter.EventData) = > {

      callback(eventData);

    });

  }



  public addGoods(goodId: number) {

    let addToShoppingCartId: emitter.InnerEvent = {

      eventId: EmitterConst.ADD_EVENT_ID

    };

    let shoppingCartData: emitter.EventData = {

      data: {

        id: goodId

      }

    };

    // 持續訂閱發布事件

    emitter.emit(addToShoppingCartId, shoppingCartData);

  }



  public deleteGoods(listItemId: number) {

    console.info("setShoppingCartGoodsList goodId" + JSON.stringify(listItemId))

    let shoppingCartData: emitter.EventData = {

      data: {

        id: listItemId,

      }

    };

    // 持續訂閱發布事件

    emitter.emit(EmitterConst.DELETE_EVENT_ID, shoppingCartData);

  }



  // 以持久化方式訂閱購物車購買事件

  public listenerEvents() {

    emitter.on(EmitterConst.BUY_EVENT_ID, (eventData: emitter.EventData) = > {

    });

  }



  // 獲取購買事件訂閱者數量并將結果返回

  public getListenerCounts(callback: (counts: number) = > void) {

    callback(emitter.getListenerCount(EmitterConst.BUY_EVENT_ID));

  }



  // 取消訂閱購買事件后將購買事件訂閱者數量結果返回

  public clearListenerCounts(callback: (counts: number) = > void) {

    emitter.off(EmitterConst.BUY_EVENT_ID);

    callback(emitter.getListenerCount(EmitterConst.BUY_EVENT_ID));

  }

}
  • 廣告彈窗:使用Emitter的事件單次訂閱emitter.once(eventId,call),eventId為number類型,單次訂閱CustomDialogController彈窗事件,彈窗觸發后自動取消訂閱。
  • 關閉廣告彈窗:使用Emitter的事件單次訂閱emitter.once(eventId,call),eventId為string類型,單次訂閱CustomDialogController彈窗事件,彈窗關閉后自動取消訂閱。
  • 購物車添加商品:使用Emitter.on持續訂閱商品添加事件,eventId為number類型,添加商品時更新購物車商品列表。
  • 購物車刪除商品:使用Emitter.on持續訂閱商品刪除事件,eventId為string類型,刪除商品時更新購物車商品列表。
  • 購物數量:使用Emitter.getListenerCount獲取購買事件訂閱者數量,進入購物車頁面顯示數量結果,清空時取消訂閱,結果為0。

審核編輯 黃宇

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

    關注

    57

    文章

    2395

    瀏覽量

    43087
  • HarmonyOS
    +關注

    關注

    79

    文章

    1983

    瀏覽量

    30630
  • OpenHarmony
    +關注

    關注

    25

    文章

    3751

    瀏覽量

    16660
收藏 人收藏

    評論

    相關推薦

    NIOS II自定義指令設計之實例

    在【原創】SOPC用戶自定義指令設計之軟件篇  和【原創】SOPC用戶自定義指令設計之硬件篇 中分別講述了自定義指令在軟件和硬件設計中的規范,在本文中,將給出一個具
    發表于 03-27 17:56 ?3210次閱讀
    NIOS II<b class='flag-5'>自定義</b>指令設計之<b class='flag-5'>實例</b>篇

    HarmonyOS開發案例:【 自定義彈窗】

    基于ArkTS的聲明式開發范式實現了三種不同的彈窗,第一種直接使用公共組件,后兩種使用CustomDialogController實現自定義彈窗
    的頭像 發表于 05-16 18:18 ?1469次閱讀
    <b class='flag-5'>HarmonyOS</b><b class='flag-5'>開發</b>案例:【 <b class='flag-5'>自定義</b>彈窗】

    LabVIEW自定義控件

    :4.同樣的方法制作一個蘑菇的開始按鈕:同時在前面板導入背景 圖片“ 瑪丼投 球”自定義控鍵和實例的關聯關系:如果選擇了自定義類型 或者嚴 格自定 義類型 ,那么創建的控鍵將和使用該控
    發表于 01-07 10:57

    HarmonyOS HiSpark AI Camera試用連載 】自定義Shell命令編程實例

    本帖最后由 :‖Lin... 于 2021-1-10 22:13 編輯 上一篇我們介紹了一下在HarmonyOS中常用的一些shell命令,接下來我們將就如何自定義一個shell命令進行講述
    發表于 01-10 02:30

    講解一下HarmonyOS中的幾個自定義組件用到的知識

    HarmonyOS 的 Component 組件對外提供了一個 DrawTask 接口,通過 addDrawTask 方法為組件添加一個 DrawTask,讓開發者可以進行自定義繪制邏輯。首先我們
    發表于 03-16 16:05

    OpenHarmony應用開發自定義彈窗

    。 aboutToAppear參考文檔:??自定義組件的生命周期-組件參考(基于ArkTS的聲明式開發范式)-ArkTS API參考-HarmonyOS應用開發?? 實現builder
    發表于 09-06 14:40

    1602自定義字符

    1602液晶能夠顯示自定義字符,能夠根據讀者的具體情況顯示自定義字符。
    發表于 01-20 15:43 ?1次下載

    怎么樣去開發自定義應用程序?

    Atmel小貼士 如何開發自定義應用程序
    的頭像 發表于 07-11 00:05 ?2414次閱讀

    鴻蒙上自定義組件的過程

    ?? 在實際開發過程中,我們經常會遇到一些系統原有組件無法滿足的情況,而 HarmonyOS 提供了自定義組件的方式,我們使用自定義組件來滿足項目需求。 ????
    的頭像 發表于 11-10 09:27 ?2983次閱讀
    鴻蒙上<b class='flag-5'>自定義</b>組件的過程

    HarmonyOS 中的幾個自定義控件介紹

    HarmonyOS 開發自定義組件目前還不是很豐富,在開發過程中常常會有一些特殊效果的組件,這就需要我們額外花一些時間實現。
    的頭像 發表于 01-04 13:49 ?2318次閱讀

    自定義視圖組件教程案例

    自定義組件 1.自定義組件-particles(粒子效果) 2.自定義組件- pulse(脈沖button效果) 3.自定義組件-progress(progress效果) 4.
    發表于 04-08 10:48 ?14次下載

    ArkUI如何自定義彈窗(eTS)

    自定義彈窗其實也是比較簡單的,通過CustomDialogController類就可以顯示自定義彈窗。
    的頭像 發表于 08-31 08:24 ?2303次閱讀

    自定義算子開發

    一個完整的自定義算子應用過程包括注冊算子、算子實現、含自定義算子模型轉換和運行含自定義op模型四個階段。在大多數情況下,您的模型應該可以通過使用hb_mapper工具完成轉換并順利部署到地平線芯片上……
    的頭像 發表于 04-07 16:11 ?2893次閱讀
    <b class='flag-5'>自定義</b>算子<b class='flag-5'>開發</b>

    labview超快自定義控件制作和普通自定義控件制作

    labview超快自定義控件制作和普通自定義控件制作
    發表于 08-21 10:32 ?13次下載

    鴻蒙ArkUI實例:【自定義組件】

    組件是 OpenHarmony 頁面最小顯示單元,一個頁面可由多個組件組合而成,也可只由一個組件組合而成,這些組件可以是ArkUI開發框架自帶系統組件,比如?`Text`?、?`Button`?等,也可以是自定義組件,本節筆者簡單介紹一下
    的頭像 發表于 04-08 10:17 ?717次閱讀
    主站蜘蛛池模板: 欧美军同video69视频 | 国产黄色片一级 | 一级特黄特黄xxx视频 | 欧美zooz人禽交免费 | 午夜精品久久久久久久四虎 | 国产黄mmd在线观看免费 | 精品国产中文一级毛片在线看 | 888午夜不卡理论久久 | 日本福利小视频 | 97射射| 色综合久久久久久久久五月性色 | 精品免费福利视频 | 中文字幕在线一区二区三区 | 91视频啪啪 | 免费看黄色片的软件 | 看黄色一级毛片 | 伊人久久亚洲综合 | 国产男女怕怕怕免费视频 | 男人日女人免费视频 | 婷婷色天使在线视频观看 | 日本卡一卡2卡3卡4精品卡无人区 | 久久综合久色欧美婷婷 | 最近2018中文字幕2019高清 | 黄色成人一级片 | 成人免费看黄网站yyy456 | 国产精品久久久久久久9999 | 成人三级在线观看 | 男女网站在线观看 | 涩综合| 四虎永久免费网站 | 美女视频黄视大全视频免费网址 | 天天天干干干 | 美女黄网站人色视频免费国产 | 一区二区三区四区精品 | 欧美日本免费 | 午夜视频福利 | 一级女人毛片人一女人 | 国产精品你懂的 | 一级网站在线观看 | 一级福利视频 | 五月天六月丁香 |