无标题文章

# 小程序工作总结

- #### 小程基础知识

   1. 小程序页面:

      - 页面组成:

       一个小程序页面由四个文件组成,分别是:

        | 文件类型 |  必需 | 作用 |

        | ---- | ---- | ---- |

        | js | 是 | 页面逻辑 |

        | wxml | 是 | 页面结构 |

        | json | 否 | 页面配置 |

        | wxss | 否 | 页面样式 |

         ![小程序页面组成](http://img.zhugangtao.com/Snipaste_2022-08-15_11-41-18.png)

      - 页面注册:[页面注册](https://developers.weixin.qq.com/miniprogram/dev/framework/app-service/page.html)

      - 页面生命周期:

         onLoad—-监听页面加载

         onReady—-监听页面初次渲染完成

         onShow—-监听页面显示

         onHide—-监听页面隐藏

         onUnload—-监听页面卸载

         [页面生命周期](https://developers.weixin.qq.com/miniprogram/dev/framework/app-service/page-life-cycle.html)

      - 页面的路由:[页面路由](https://developers.weixin.qq.com/miniprogram/dev/framework/app-service/route.html)

   2. 组件的介绍和使用:[组件](https://developers.weixin.qq.com/miniprogram/dev/framework/custom-component/)

   3. 获取界面上的节点信息:[获取界面上的节点信息](https://developers.weixin.qq.com/miniprogram/dev/framework/view/selector.html)

   4. 小程序分包:[小程序分包](https://developers.weixin.qq.com/miniprogram/dev/framework/subpackages/basic.html)

   5. 用微信小程序开发工具生成骨架屏:[骨架屏](https://developers.weixin.qq.com/miniprogram/dev/devtools/skeleton.html)

   6. 常用组件:[scroll-view](https://developers.weixin.qq.com/miniprogram/dev/component/scroll-view.html)  [swiper](https://developers.weixin.qq.com/miniprogram/dev/component/swiper.html)

   7. 调试:[vconsole](https://developers.weixin.qq.com/miniprogram/dev/framework/usability/vConsole.html)   [调试工具](https://developers.weixin.qq.com/miniprogram/dev/framework/performance/perf_debug.html)

   8. 页面通信:

      - #### storeage+onShow

        ```

         // 以A->B示例

         // A 页面

         Page({

             onShow(){

                 if(wx.getStorageSync('$datas')){

                     console.log(wx.getStorageSync('$datas'))  // 11111

                 }

             },

         })

         // B 页面

         Page({

             someActions(){

                 wx.setStorageSync('$datas','11111')

             },

         })

        ```

      - #### globalData + onShow

        ```

        // 以A->B示例

        // A 页面

        const app = getApp();

        Page({

            onShow(){

                if(app.globalData.$datas){

                    console.log(app.globalData.$datas)  // 11111

                }

            },

        })

        // B 页面

        const app = getApp();

        Page({

            someActions(){

                app.globalData.$datas = '11111';

            },

        })

        ```

      - #### EventChannel

        ```

         // A页面

         wx.navigateTo({

           url: 'B?id=1',

           events: {

             // 为指定事件添加一个监听器,获取被打开页面传送到当前页面的数据

             acceptDataFromOpenedPage: function(data) {

               console.log(data)

             },

             someEvent: function(data) {

               console.log(data)

             }

           },

           success: function(res) {

             // 通过eventChannel向被打开页面传送数据

             res.eventChannel.emit('acceptDataFromOpenerPage', { data: 'test' })

           }

         })

         // B页面

         Page({

           onLoad: function(option){

             console.log(option.query)

             const eventChannel = this.getOpenerEventChannel()

             eventChannel.emit('acceptDataFromOpenedPage', {data: 'test'});

             eventChannel.emit('someEvent', {data: 'test'});

             // 监听acceptDataFromOpenerPage事件,获取上一页面通过eventChannel传送到当前页面的数据

             eventChannel.on('acceptDataFromOpenerPage', function(data) {

               console.log(data)

             })

           }

         })

        ```

      - #### getCurrentPages

        ```

         // A页面

         Page({

             someActions(datas){

                 console.log(datas); // 11111

             },

         })

         // B页面

         Page({

             someActions(){

                 const pages = getCurrentPages();

                 if (pages.length < 2) return;

                 // 如果页面层级较多,可用循环去匹配到A页面;

                 // 此处仅做2个页面的示例

                 const prevPage = pages[pages.length - 1];

                 // 路由匹配到A

                 if (prevPage.route === 'A') {

                     prevPage.someActions('11111');

                 }

             },

         })

        ```

   9. 性能优化和进阶学习:

      - [文档](https://developers.weixin.qq.com/miniprogram/dev/framework/performance/)

      - [视频](https://developers.weixin.qq.com/community/business/doc/0002ce57c346300cccdd3ad835280d)    

- #### 项目结构介绍

  ```

  |——assets                                  //主包的静态资源目录

      |——image                               //主包的图片目录

      |——style                               //图标和公共样式目录

          |——icon                            //icon图标样式目录

          |——common                          //公共样式目录

      |——js                                  //主包的js目录

  |——node_modules                            //npm安装包的目录

  |——miniprogram_npm                         //小程序构建后的node_moudels目录

  |——components                              //公共组件目录

  |——pages                                   //主包页面

  |——app.js                                  //小程序的入口js文件(类似Vue的main.js)

  |——app.json                                //小程序的配置文件

  |——app.wxss                                //小程序全局样式文件

  |——package.json                            //npm的项目信息文件

  |——project.config.json                     //小程序的项目配置文件

  ```

- #### 项目工具库

  1. UI库:[Vant Weapp](https://vant-contrib.gitee.io/vant-weapp/#/home)

  2. 时间处理库:[dayjs](https://dayjs.fenxianglu.cn/)(moment.js有点大就没用)

  3. echarts:[echarts在小程序中使用](https://blog.csdn.net/qq_38987146/article/details/120324006) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[echarts自定义构建](https://echarts.apache.org/zh/builder.html)

- #### 组件的使用

  1. ##### 页面标题组件:

      因为用的标题和底部tabbar都不是微信原生的、是vantUI的、所以内容区域自适应高度的话要自己减去相应的高度。

       - .wxml文件代码

      ```

        <lb-box title="顶部标题内容" otherHeight="{{50}}" left-arrow="{{false}}">

          <!-- 内容区域(其高度是自适应的默认除去上部的高,若otherHeight有值的话也会减去。) -->

        </lb-box>

      ```

      - .json文件代码

      ```

      {

        "usingComponents": {

              "lb-box": "/components/lb-box/lb-box" //不需要局部注册、已经在全局注册过了

        },

      }

      ```

  3. ##### 页面scorll-view加载组件:

      - .wxml文件代码

      ```

       <lb-scroll-list class="scroll-list" url="{{url}}" search-form="{{searchForm}}" bind:handleData="handleData" bind:reLoad="reLoad">

          <view wx:for="{{dataList}}" class="scroll-item" wx:key="index">

            <view>

              <view class="item-title">{{item.pointChangeName}}</view>

              <view class="item-time">{{item.createTimeStr}}</view>

            </view>

            <view class="item-integral">{{(item.pointChange > 0 ? '+':'')+item.pointChange}}</view>

          </view>

        </lb-scroll-list>

      ```

      - .js文件代码

      ```

       data: {

           // 搜索条件

           searchForm: {

             operationTypes: '0,5,6,8,9,10,11,12,13',

           },

           //列表数据

           dataList: [],

           url: "/api/v3.0/vip-management/vip-card-log-do/getVipCardLogInfo",

        }

        reLoad() {

          this.setData({

            dataList: [],

          })

          // reload做的外部操作

          this.getAllPoint()

        },

      ```

      - .json文件代码

      ```

      {

        "usingComponents": {

          "lb-scroll-list":"/components/lb-new-scroll-list/lb-new-scroll-list"

        },

      }

      ```

  4. ##### 图片上传组件:

      - .wxml文件代码

      ```

      <lb-upload-img bind:getFileList="getFileList" maxCount="{{5}}" />

      ```

      - .js文件代码

      ```

      data: {

          fileList: [] //已上传图片展示数组

      }

      getFileList(e) {

        // console.log(e);

        this.setData({

          fileList: e.detail

        })

       },

      ```

      - .json文件代码

      ```

      {

        "usingComponents": {

          "lb-upload-img":"/components/lb-upload-img/lb-upload-img"

        },

      }

      ```

- #### 踩坑和注意事项

  - ##### scorll-view的高度问题:

    每次高度改变的话记得用wx:if重新渲染,从而让其重新初始化、否则造成意想不到的坑。列:自适应scorll-view高度时应赋值其高度为'',因为过早赋值其高度会导致微信渲染其的下拉刷新高度出现问题。

  - ##### ios机型下拉的问题:

    每个页面的.JSON文件都要记得配置"disableScroll": true用来禁止ios机型下拉的,全局配置设置没用。

  - ##### 解决图片设置widFix闪烁的问题:

    在全局app.wxss设置height:auto,所以除了widthFix大部分的图片要加上高度、不然会不显示。

  - ##### 微信开发者工具的坑:

    微信开发者工具中引入一些Vant组件时一开始样式会不生效,可以先注释app.wxss的样式再保存,引入组件的样式就会生效了。一些样式在微信开发者工具上展示是有问题的,但是实机暂无问题,列:echarts在滚动时会出现偏移,实机无问题。  

  - ##### 关注小程序bug列表(尽量避免):[小程序bug](https://developers.weixin.qq.com/community/develop/issueList?type=%E4%BF%AE%E5%A4%8D%E4%B8%AD&block=bug)

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,222评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,455评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,720评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,568评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,696评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,879评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,028评论 3 409
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,773评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,220评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,550评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,697评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,360评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,002评论 3 315
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,782评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,010评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,433评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,587评论 2 350

推荐阅读更多精彩内容

  • 总结小程序 1小程序是微信全新定义的规范,是基于xml+js的,不支持也不兼容HTML,兼容受限的部分CSS写法。...
    不羁绊的青春阅读 343评论 0 0
  • 小程序开发工具--详情--本地设置--启用自定义处理命令用来执行脚本 “右滑手势返回”能力调整 为了提升用户操作的...
    JamesKing阅读 608评论 0 0
  • width: 65%;border: 1px solid #ddd;outline: 1300px solid #...
    邵胜奥阅读 4,783评论 0 1
  • ## 你可能会用到的css属性 > css语言相对简单,css的属性值就这么多,没有太多逻辑性,没有算法,熟记各个...
    流年_7fec阅读 228评论 0 0
  • # 内容概述 ## 一. css特性 + 继承 + 层叠 ### 1. CSS属性的继承 CSS中有些属性是可继承...
    Autism_8eaf阅读 102评论 0 0