小程序

引入第三方包

微信小程序支持 echarts, 微信小程序加载 echarts 引入 echarts

微信小程序引入

github 地址

echarts 体积过大的时候, 采用压缩, 不要下最新的, 下 5.0 就行了

echarts 刷新功能, 通过调用 setOptions 方法

引用 vant weapp

npm init -y 创建package.json
npm i -s 安装vant
点击详情, 默认使用npm模块
点击工具, 构建npm, 每次安装新的npm包的时候都要构建一下
在.json文件中的, userComponents中注入

  • 修改 vant 的样式
<van-search  backgroun="#aaa" />
<!-- 覆盖样式 -->
去页面上面, 选中类名, 然后在wxss里面覆盖掉, 使用 !important

组件

组件创建

去 components 中创建一个组件, 会自动生成模板, 组件生命周期和页面的生命周期不相同

发送事件

methods: {
    hadnleRightClick() {
        this.triggerEvent("click")
    }
}

bind:click="handleClick"

组件监听事件

this.triggerEvent("父组件自定义事件的名称", 要传递的参数)

<list-item bind:change="handleChange" ></list-item>
点击事件 bindtap

传值

<child-com count="{countData}">

接受
properties: {
    count: {
        type: "",
        value: ""
    }
}

小程序属性想要获取绑定后的值

通过 data-jidjj="" 的形式来获取
const idx = event.target.dataset.idx

指令用法

循环

wx:for="{{arr}}" key="*this"
默认有item, index, 对象的时候有差异

显示

wx:if = {{true}}

生命周期

app 生命周期

app.js

  • onLaunch 第一次启动的时候触发
  • onShow 页面被用户看到 -- 对数据或页面进行重置
  • onHide 页面隐藏 -- 暂停或者清除定时器
  • onError 应用代码发生报错触发 -- 在应用发生代码报错的时候,收集用户的错误信息,通过异步请求将错误的信息发送后台去
  • onPageNotFound 页面找不到 -- 应用第一次启动的时候,如果找不到第一个入口页面才会触发, 只有第一次进不去才会触发

页面生命周期

  • onLoad
  • onShow

刷新

上拉刷新

onReachBottom() {
    // 如果没有更多数据的时候, 应该return掉
}

一个是 page 自带的下拉触底钩子事件 onReachBottom 能做的只是下拉到底部的时候通知你触底了,一个是 scroll-view 标签自带事件

下拉刷新

json 中配置

enablePullDownRefresh: true

onPullDownRefresh() {
    // 加载新数据, 把一些状态还原

    // 停止下拉刷新
    wx.stopPullDownRefresh()
}

顶部 navigation 自定义

需要去.json 里面开启自定义
"navigationStyle": "custom"
这样就没有默认的头部, 需要自己写

图片上传

    uploadPhoto() {
        var that = this;
        wx.chooseImage({
            count: 1, // 默认9
            sizeType: ["compressed"], // 可以指定是原图还是压缩图,默认二者都有
            sourceType: ["album", "camera"], // 可以指定来源是相册还是相机,默认二者都有
            success: function(res) {
                // 返回选定照片的本地文件路径列表,tempFilePath可以作为img标签的src属性显示图片
                var tempFilePaths = res.tempFilePaths;
                upload(that, tempFilePaths);
            },
        });
    },
});

function upload(page, path) {
    wx.showToast({
            icon: "loading",
            title: "正在上传",
        }),
        wx.uploadFile({
            url: constant.SERVER_URL + "/FileUploadServlet",
            filePath: path[0],
            name: "file",
            header: {
                "Content-Type": "multipart/form-data",
            },
            formData: {
                //和服务器约定的token, 一般也可以放在header中
                session_token: wx.getStorageSync("session_token"),
            },
            success: function(res) {
                console.log(res);
                if (res.statusCode != 200) {
                    wx.showModal({
                        title: "提示",
                        content: "上传失败",
                        showCancel: false,
                    });
                    return;
                }
                var data = res.data;
                page.setData({
                    //上传成功修改显示头像
                    src: path[0],
                });
            },
            fail: function(e) {
                console.log(e);
                wx.showModal({
                    title: "提示",
                    content: "上传失败",
                    showCancel: false,
                });
            },
            complete: function() {
                wx.hideToast(); //隐藏Toast
            },
        });
}

跳转

wx.navigateTo({
    url: "/djfid/df?id=344"
})

// 获取跳转过来的id
onLoad(params) {
    console.log(params.id)
}

// tab切换跳转
wx.switchTab({
    url: '/page/page'
})

共享数据

app.js 中共享, 但是数据不是响应式的

  1. mitt 事件总线库, 只会发和接数据, 不能存储共享数据

小程序解决方案

  1. 放到 app.js 中的 global, 数据不是响应式的

状态管理工具

文档 https://gitee.com/ElenaK/hy-event-store

安装 npm i hy-event-store
TJ

import { HYEventStore } from 'hy-event-store'

const eventStore = new HYEventStore({
  state: {
    upRanking: {},
  },
  actions: {
    getRankingsAction(ctx) {},
  }
})

export default eventStore

// 使用方法
eventStore.setState("playIndex", index) // 设置state中的值
eventStore.onState("hotRanking", this.hotRankingHanlder) // 监听state中的值, 并且触发某些方法

eventStore.dispatch("getRankingsAction") // 触发action
eventStore.offState("hotRanking", this.hotRankingHanlder) // 卸掉监听

setData

setData 是同步的, 但是对页面进行渲染的过程是异步的
react 在大部分情况下, setState 是异步的, 为了保证 data 里面的数据始终和页面以及组件中的数据保持一致

存储数据

1. 通过本地存储

const logs = wx.getStorageSync('logs')
wx.setStorageSync('logs', logs)

2. 通过app.js中的 globalData 存储

globalData: {}

微信支付

  1. 创建订单

    • 先获取用户登录成功后的 token 值 -- 调用后端接口
      前四个参数通过 button 的 open-type 中获取, 最后一个通过 wx.login 获取,跳转页面,点击按钮获取想要信息

    1. 调用获取用户信息按钮, 拿到前四个参数

    2. 调用登录接口获取信息

    3. 封装优化回调

      优化后的代码

      完整步骤

      调用后台接口拿到订单编号

  2. 预支付
    接口

  3. 返回数据

  4. 调用微信内支付,上面的数据用于这一步的参数

  5. 发起微信支付
    返回支付成功或者失败

  6. 查询订单
    调用接口,看看后台是否真的成功了,跳转到订单页面

其余需要注意部分

获取系统参数

wx.getSystemInfoSync();

获取某个 DOM

const query = wx.createSelectQuery();
query.select('.swiper-image').boundingClientReact();

插槽实现默认插入值

插槽不能默认值
实现方案: 通过一个伪类选择器
<view class="slot">
    <slot></slot>
</view>
<view class="default">
    <text>rightText3</text>
</view>
.header .slot:empty + .default {
    display: block;
    // 当里面为空的时候进行一些处理
}
.header .default {
    display: none;
}

引入 script 脚本

we-script

watch 使用

页面需要单独注入 https://www.jianshu.com/p/34c2403a7a1c

组件中集成得有 https://blog.csdn.net/m0_63466615/article/details/123344136

// 只有组件里面才能监听
observers: {
'popShow': function(val) {}
},

封装 base-echarts

类似 filter 解决方案

通过 wxs
不支持 es6 语法

<!-- wxs -->
<!-- 比如保留两位小数 -->
<!-- utils/format.wxs -->

function parseNum(val) {
    var value =  val+""
    return value.toFix(2)
}
module.exports = {
    parseNum: parseNum
}

使用

<wxs src="../../utils/format.wxs" module="format"></wxs>

<view>
    {{format.parseNum('343.34343')}}
</view>

微信复制

  /**
   * 复制
   */
  copyText(e) {
      wx.setClipboardData({
          data: e.currentTarget.dataset.text,
          success(res) {
              console.log("success -> res", res)
          }
      })
  },

返回上一页面并传参

// 直接调用它返回即可
_returnToPreviousPage() {
    let pages = getCurrentPages();
    let prevPage = pages[pages.length - 2];
    if (prevPage) {
        prevPage.setData({
            isRresh: true
        })
    }
},

事件穿透, 事件冒泡将 bindtap 改为 catchtap

关于微信小程序报错 微信小程序 Cannot read property 'mark' of undefined 由于没有打开扩展不支持 async

注意在 less 中如果使用 calc 的时候, 编译会出问题,所以需要原样输出

不能用 background

所有与图片相关的都用 image
image 用几种用法:

  • aspectFill
  • aspectFit
  • scaleToFill
  • widthFix

图片预览有专门的方法

wx.previewImage

导入样式

  1. 只能用 @import
  2. 只能使用相对路径

长按文字复制

只能通过 text 标签, 并且 user-select 属性设置为 true

swiper 会有一个默认高度, 不会由内容自动撑开

本文由博客一文多发平台 OpenWrite 发布!

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

推荐阅读更多精彩内容