国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

[填坑手冊(cè)]小程序目錄結(jié)構(gòu)和component組件使用心得

myshell / 3111人閱讀

摘要:組件模板與組件數(shù)據(jù)結(jié)合后生成的節(jié)點(diǎn)樹,將被插入到組件的引用位置上。事件用于子組件向父組件傳遞數(shù)據(jù),可以傳遞任意數(shù)據(jù)。官方文檔往期回顧填坑手冊(cè)小程序生成海報(bào)一拆彈時(shí)刻小程序生成海報(bào)二

小程序目錄結(jié)構(gòu)

關(guān)于小程序的目錄結(jié)構(gòu),可以說一開始大家都有各自的開發(fā)習(xí)慣和命名規(guī)則,但一旦項(xiàng)目變得復(fù)雜龐大的時(shí)候,你就發(fā)現(xiàn)管理起來和后期維護(hù)變得很麻煩,如果是 協(xié)同開發(fā) 的話,更容易出現(xiàn) “互坑” 的情況。

智庫君在一年多的小程序開發(fā)中也跳過不少的坑,總結(jié)了一套還算好維護(hù)的目錄結(jié)構(gòu)跟大家分享(僅供參考,覺得好拿去,覺得不好歡迎提出意見),以下是實(shí)戰(zhàn)項(xiàng)目中的結(jié)構(gòu)示例:

├─  app.js    --- 小程序加載時(shí)優(yōu)先加載的入口JS
├─  app.json   ---入口文件和公共配置
├─  app.wxss     ---公共樣式表
├─  project.config.json     ---小程序全局配置文件
├─  sitemap.json     ---允許微信索引文件
│  
├─cloud-functions     ---云函數(shù)
│  └─setCrypto      ---數(shù)據(jù)加密模塊,用戶加密一些數(shù)據(jù)
│          index.js
│          package.json
│          ...
│          ...
│          
├─components      ---小程序自定義組件
│  ├─plugins      --- (重點(diǎn))可獨(dú)立運(yùn)行的大型模塊,可以打包成plugins
│  │  ├─comment         ---評(píng)論模塊
│  │  │  │  index.js
│  │  │  │  index.json
│  │  │  │  index.wxml
│  │  │  │  index.wxss
│  │  │  │  services.js    ---(重點(diǎn))用來處理和清洗數(shù)據(jù)的service.js,配套模板和插件
│  │  │  │      
│  │  │  └─submit    ---評(píng)論模塊子模塊:提交評(píng)論
│  │  │          index.js
│  │  │          index.json
│  │  │          index.wxml
│  │  │          index.wxss
│  │  │      
│  │  └─canvasPoster     ---canvas海報(bào)生成模塊
│  │          index.js
│  │          index.json
│  │          index.wxml
│  │          index.wxss
│  │          services.js    ---(重點(diǎn))用來處理和清洗數(shù)據(jù)的service.js,配套模板和插件
│  │     ...
│  │     ...
│  │          
│  └─templates   ---(重點(diǎn))模板,通過外部傳參的容器,不做過多的數(shù)據(jù)處理
│      │      
│      ├─slideshow     ---滾屏切換模板
│      │      index.js
│      │      index.json
│      │      index.wxml
│      │      index.wxss
│      │      service.js    ---(重點(diǎn))用來處理和清洗數(shù)據(jù)的service.js,配套模板和插件
│      │      
│      └─works       ---作品模板
│          │  index.js
│          │  index.json
│          │  index.wxml
│          │  index.wxss
│          │  service.js
│          │  
│          ├─articlePlugin    ---作品模板中的文章類型
│          │      index.js
│          │      index.json
│          │      index.wxml
│          │      index.wxss
│          │      
│          ├─galleryPlugin    ---作品模板中的九宮格類型
│          │      index.js
│          │      index.json
│          │      index.wxml
│          │      index.wxss
│          │      
│          └─videoPlugin     ---作品模板中的視頻類型
│                  index.js
│                  index.json
│                  index.wxml
│                  index.wxss
│                  ...
│                  ...
│                  
├─config     ---自定義配置文件
│      config.js    ---存放基礎(chǔ)配置
│      constants.js   ---存儲(chǔ)常量
│      weui.wxss   ---第三方文件wxss,js等
│      ...
│      ...
│      
├─pages     ---小程序頁面
│  ├─user      ---用戶頁面
│  │      index.js
│  │      index.json
│  │      index.wxml
│  │      index.wxss
│  ├─news      ---新聞頁面
│  │      index.js
│  │      index.json
│  │      index.wxml
│  │      index.wxss
│  │      
│  └─home      ---首頁
│         index.js
│         index.json
│         index.wxml
│         index.wxss
│         ...   
│         ...   
│          
├─request      ---https請(qǐng)求管理(根據(jù)switch tab分類會(huì)比較好)
│      common.js    ---一些公共請(qǐng)求獲取,如兌換openId,unionId 等
│      news.js
│      uri.js     --- (重點(diǎn))總的URI請(qǐng)求管理,方便切換和配置DEV,QA,PROD環(huán)境
│      user.js
│      ...
│      ...
│      
└─utils       ---功能組件
        logger.js    ---日志管理
        util.js       ---公共小組件庫
        ...
        ...
        
例如微信自己的wepy的官方文檔,現(xiàn)在也添加了目錄結(jié)構(gòu)說明:


為什么一定要寫這個(gè)目錄結(jié)構(gòu)呢?
不知道大家有沒有發(fā)現(xiàn),在以往的老項(xiàng)目交接和多人協(xié)同開發(fā)中,容易遇到別人寫的模塊,變量命名不準(zhǔn)確,或者資料缺損,一次十來個(gè)方法/組件間的互相調(diào)用,直接把接(盤)手的人整懵逼了,所以智庫君覺得,無論是獨(dú)立開發(fā),還是協(xié)同開發(fā),留一份完整的目錄說明文檔是很有必要的,勿坑 他人 OR 未來的自己~~~

component使用心得

大家在開發(fā)過程中肯定會(huì)去看官方文檔,但不可能全看完才開始寫代碼,大多數(shù)情況都是用到了再看,本人也是,所以下面抽一些開發(fā)中遇到的重點(diǎn)來講:

一、引用組件模板頁面的自定義

組件模板的寫法與頁面模板相同。組件模板與組件數(shù)據(jù)結(jié)合后生成的節(jié)點(diǎn)樹,將被插入到組件的引用位置上。
在組件模板中可以提供一個(gè) 節(jié)點(diǎn),用于承載組件引用時(shí)提供的子節(jié)點(diǎn)。



  這里是組件的內(nèi)部節(jié)點(diǎn)
  


  
    
    這里是插入到組件slot中的內(nèi)容
    在加載組件的頁面里自定義內(nèi)容,將沒有復(fù)用性的內(nèi)容寫在這里
  

頁面自定義部分默認(rèn)是加載在組件上方

為什么要在引用組件的頁面添加這些內(nèi)容呢?
因?yàn)榻M件其中一個(gè)重要的特點(diǎn)是復(fù)用性,但是有的時(shí)候可能要根據(jù)不同場(chǎng)景做一些自定義,如果在組件中寫大量的場(chǎng)景/邏輯判斷,會(huì)增加組件的冗余,而且這些方法只是被復(fù)用一次的話,完全可以不寫到組件里。

二、“一鍵換膚”根據(jù)不同場(chǎng)景給組件引入外部樣式

//組件中js
Component({
    /**
    * 引入外部樣式,可傳多個(gè)class
    */
    externalClasses: ["extra-class","extra-class2"],
})

extra-class 從外部引入父級(jí)css,可用根據(jù)不同場(chǎng)景配置不同的樣式方案,這樣使得組件自定義能力更強(qiáng)。

三、數(shù)據(jù)清洗與容錯(cuò)
//service.js  思路示例
module.exports = {
    /**
     * 功能:處理作者列表
     * @param list
     * @returns {Array}
     */
    authorList: function (list = []) {
        let result = [];
        list.forEach(item => {
            result.push({
                guid: item.recommend_obj_id || "",
                type: item.recommend_type || "",
                logo: (item.theme_pic || "").trim() || "",
                title: item.title || ""
            });
        });
        return result;
    }
};

如果外部傳入的數(shù)據(jù)要分別導(dǎo)入多個(gè)組件中,可以在組件中建立一個(gè)對(duì)應(yīng)的service.js,有2個(gè)作用:

清洗數(shù)據(jù),避免setData()的時(shí)有過多的臟數(shù)據(jù)

錯(cuò)誤數(shù)據(jù)的兼容,添加數(shù)據(jù)缺省值,增加代碼健壯性

四、canvas在component組件中無法選中的問題
    //這里只需要在后面 添加this對(duì)象
    let ctx = wx.createCanvasContext("myCanvas", this);

其他一些默認(rèn)組件,遇到類似的問題,一般只要引用時(shí)傳入this對(duì)象即可解決。

五、組件之間的通訊

在實(shí)際生產(chǎn)環(huán)境中,我們常常需要控制各個(gè)組件之間的互相通信/傳參,下面介紹下具體的用法:

WXML 數(shù)據(jù)綁定:用于父組件向子組件的指定屬性設(shè)置數(shù)據(jù),僅能設(shè)置 JSON 兼容數(shù)據(jù)(自基礎(chǔ)庫版本 2.0.9 開始,還可以在數(shù)據(jù)中包含函數(shù))。具體在 組件模板和樣式 章節(jié)中介紹。

事件:用于子組件向父組件傳遞數(shù)據(jù),可以傳遞任意數(shù)據(jù)。

如果以上兩種方式不足以滿足需要,父組件還可以通過 this.selectComponent 方法獲取子組件實(shí)例對(duì)象,這樣就可以直接訪問組件的任意數(shù)據(jù)和方法。

設(shè)置監(jiān)聽事件:




// index.js 父頁面中
Page({
  setMyEvent: function(e){
    let self = this;
    if (e.detail) { // 自定義組件觸發(fā)事件時(shí)提供的detail對(duì)象
      switch (e.detail) {
        case "hidden":  //隱藏 懸浮框上的評(píng)論
          this.setData({
            isFixCommentShow: false
          });
          break;
        case "fixRefresh":   //刷新懸浮框
          this.setData({
            fixRefresh: true
          });
          break;
        case "commentRefresh":  //刷新評(píng)論
          this.setData({
            commentRefresh: Math.random()
          });
          break;
        case "createPoster":  //生成海報(bào)組件
          self.setPosterSave();
          break;
      }
    }
  }
})

父頁面引用子組件,子組件發(fā)送的信息,可以通過bind的方法監(jiān)聽到,來獲取到具體的傳參值。

觸發(fā)事件

自定義組件觸發(fā)事件時(shí),需要使用 triggerEvent方法,指定事件名、detail對(duì)象和事件選項(xiàng):



   



   



  
//組件中js
Component({
  properties: {},
  methods: {
    onTap: function(){
        var myEventDetail = {} // detail對(duì)象,提供給事件監(jiān)聽函數(shù)
        var myEventOption = {} // 觸發(fā)事件的選項(xiàng)
        this.triggerEvent("myevent", myEventDetail, myEventOption)
        //myEventOption的一些配置:
        this.triggerEvent("customevent", {}, { bubbles: true }) // 會(huì)依次觸發(fā) pageEventListener2 、 pageEventListener1
        this.triggerEvent("customevent", {}, { bubbles: true, composed: true }) // 會(huì)依次觸發(fā) pageEventListener2 、 anotherEventListener 、 pageEventListener1
    }
  }
});

myEventOption 的配置:

bubbles(Boolean):事件是否冒泡

composed(Boolean):事件是否可以穿越組件邊界,為false時(shí),事件將只能在引用組件的節(jié)點(diǎn)樹上觸發(fā),不進(jìn)入其他任何組件內(nèi)部

capturePhase(Boolean):事件是否擁有捕獲階段

需要強(qiáng)調(diào)一點(diǎn):建議大家不要在組件上bind太多的監(jiān)聽,一方面以后管理起來會(huì)比較麻煩,另一方面首次加載如果調(diào)用過多方法會(huì)引起數(shù)據(jù)渲染的卡頓。

Component官方文檔:
https://developers.weixin.qq....

往期回顧:

[[填坑手冊(cè)]小程序Canvas生成海報(bào)(一)](https://segmentfault.com/a/11...

[[拆彈時(shí)刻]小程序Canvas生成海報(bào)(二)](https://segmentfault.com/a/11...

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/104853.html

相關(guān)文章

  • [打怪升級(jí)]小程序評(píng)論回復(fù)發(fā)貼功能實(shí)戰(zhàn)(一)

    摘要:往期回顧打怪升級(jí)小程序評(píng)論回復(fù)和發(fā)貼功能實(shí)戰(zhàn)二填坑手冊(cè)小程序生成海報(bào)一拆彈時(shí)刻小程序生成海報(bào)二填坑手冊(cè)小程序目錄結(jié)構(gòu)和組件使用心得 showImg(https://segmentfault.com/img/remote/1460000019733090?w=818&h=516); 在學(xué)習(xí)成長(zhǎng)的過程中,常常會(huì)遇到一些自己從未接觸的事物,這就好比是打怪升級(jí),每次打倒一只怪,都會(huì)獲得經(jīng)驗(yàn),讓...

    YJNldm 評(píng)論0 收藏0
  • [打怪升級(jí)]小程序評(píng)論回復(fù)發(fā)帖功能實(shí)戰(zhàn)(二)

    摘要:發(fā)帖的功能只要理清思路,其實(shí)并不復(fù)雜,利用機(jī)器做內(nèi)容審查是關(guān)鍵,直接關(guān)系到小程序的整體安全。內(nèi)容檢查重點(diǎn)由于內(nèi)容安全對(duì)于小程序運(yùn)營(yíng)至關(guān)重要,稍有不慎就容易導(dǎo)致小程序被封,所以在這塊的校驗(yàn)除了常規(guī)人工檢查外,我們還可以用到微信的內(nèi)容安全。 showImg(https://segmentfault.com/img/remote/1460000019955210?w=658&h=440); ...

    ThinkSNS 評(píng)論0 收藏0
  • 帶你玩轉(zhuǎn)小程序開發(fā)實(shí)踐|含直播回顧視頻

    摘要:小程序的視圖層目前使用作為渲染載體,而邏輯層是由獨(dú)立的作為運(yùn)行環(huán)境。比如小程序的,通信一次就像是寫情書所以,嚴(yán)格來說,小程序是微信定制的混合開發(fā)模式。出棧入棧解決小程序接口不支持的問題小程序的所有接口,都是通過傳統(tǒng)的回調(diào)函數(shù)形式來調(diào)用的。 作者:張利濤,視頻課程《微信小程序教學(xué)》、《基于Koa2搭建Node.js實(shí)戰(zhàn)項(xiàng)目教學(xué)》主編,滬江前端架構(gòu)師本文原創(chuàng),轉(zhuǎn)載請(qǐng)注明作者及出處 小程...

    fxp 評(píng)論0 收藏0
  • 從入門到上線一個(gè)天氣小程

    摘要:天氣預(yù)報(bào)小程序說了很多小程序開發(fā)的基礎(chǔ)準(zhǔn)備,下面就結(jié)合個(gè)人實(shí)際練手項(xiàng)目天氣預(yù)報(bào)小程序簡(jiǎn)單說明。物料準(zhǔn)備從需求結(jié)果導(dǎo)向,天氣程序首先要能獲取到當(dāng)前所在地天氣狀況,再次可以自由選擇某地,知道其天氣狀況。 前言 學(xué)習(xí)了一段時(shí)間小程序,大致過了兩遍開發(fā)文檔,抽空做個(gè)自己的天氣預(yù)報(bào)小程序,全當(dāng)是練手,在這記錄下。小程序開發(fā)的安裝、注冊(cè)和接入等流程就不羅列了,在小程序接入指南已經(jīng)寫得很清楚了,以下...

    Anshiii 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<