微信小程序开发

1.开发前准备

2. 目录文件介绍

  • 小程序的初始项目目录。


    image.png
  • pages是所有的页面组件目录,里面包含的每一个页面都有四个文件js(页面逻辑代码),json(页面属性配置),wxml(html代码),wxss(css样式)。
  • utils是一个存放公共js方法的目录。
  • app.js是全局js逻辑文件,在任何独立页面的js文件都能访问app.js里面方法。
  • 在app.json中进行全局的配置,例如导航栏的文字颜色,背景颜色,标题,tabbar的设置,都通过app.json进行配置。
  • app.wxcss全局的css样式设置。

3.app.json常用配置

详细配置参考(https://developers.weixin.qq.com/miniprogram/dev/reference/configuration/app.html

  • 全局配置
  • pages用来配置页面路径信息,不需要写后缀名
{
  "pages": ["pages/index/index", "pages/logs/logs"]
}
  • window用来配置小程序导航栏和状态栏窗口背景色等。
  "window": {
    "backgroundTextStyle": "light",//下拉 loading文字 的样式,light/dark
    "navigationBarTextStyle":"white",//导航栏标题颜色,仅支持 black / white
    "navigationBarBackgroundColor": "#000",//导航栏背景色支持16进制颜色
    "navigationBarTitleText": "today",//导航栏标题内容
    "backgroundColor":"#000000",//下拉loading背景色
    "enablePullDownRefresh":true,//是否开启下拉刷新
    "onReachBottomDistance":50,//下拉刷新的距离
    "pageOrientation":"portrait"//屏幕旋转配置
  },
  • tabBar配置底部tab导航栏
 "tabBar":{
    "color":"#333",//字体颜色
    "selectedColor":"#3D74DD",//菜单选中字体颜色
    "backgroundColor":"#ececec",//导航栏背景颜色
    "borderStyle":"black",//border颜色只有black和white
    "position":"bottom",//位置
    "custom":false,//自定义tabBar默认false
    "list":[//tab数组最少两个,最多5个
      {
        "pagePath":"pages/index/index",//跳转页面路径
        "text":"home",//tab标题
        "iconPath":"assets/images/home.png",//tab默认icon路径
        "selectedIconPath":"assets/images/homed.png"//tab选中icon路径
      },{
        "pagePath":"pages/search/search",
        "text":"search",        
        "iconPath":"assets/images/search.png",
        "selectedIconPath":"assets/images/searched.png"
      }
    ]
  }
}
  • networkTimeout各类网络请求超时时间默认是60000毫秒
"networkTimeout":{
    "request":3000,//网络请求
    "connectSocket":3000,//socket请求
    "uploadFile":3000,//文件上传
    "downloadFile":3000//文件下载
  }
  • debug开始debug模式方便用于调试,会将页面注册,页面路由数据更新打印出来。
    image.png
"debug":true
  • usingComponents声明自定义组件为全局自定义组件或者第三方组件。
{
  "usingComponents": {
    "van-button": "vant-weapp/button"
  }
}
{
  "permission": {
    "scope.userLocation": {
      "desc": "你的位置信息将用于小程序位置接口的效果展示" // 高速公路行驶持续后台定位
    }
  }
}
  • 页面配置
  • 每个单独的页面都会有四个文件.wxml.wxss.json.js,页面单独配置需要在json文件中配置,和app.json的区别就是一个是总的设置,一个是局部单独的设置。配置选项和app.json全局配置一样。

4.页面生命周期函数

  • 每个页面都会有一个生命的周期从加载显示到隐藏销毁一个完整的流程,这些生命周期都包含在page({}),里面,包括每个页面的data(类似于vue里面data)也包含在`page({})里面。

新建的page页面在js文件中一定要加上page({})否则会报错。

image.png
  • data页面所有的动态数据绑定都来自于data,类似于vuedata
  • onLoad,页面加载时触发,只触发一次,类似于vuecreated
  • onShow页面显示时触发。
  • onReady页面渲染完成时触发。类似于vuemounted
  • onHide页面隐藏或者切换到后台是触发。
  • onUnload页面卸载时触发,类似于vuedestoyed
Page({
  data:{
    value:'today'
  },
  onLoad(){
    console.log("初始化")
  },
  onReady(){
    console.log("准备好了")
  },
  onShow(){
    console.log('显示')
  },
  onHide(){
    console.log("隐藏")
  },
  onUnload(){
    console.log("页面卸载")
  },
})

5.页面事件处理函数

  • 页面处理函数,是用户在当前页面的行为触发的,例如下拉刷新,滑动,分享,旋转
  • onPullDownRefresh监听用户下拉刷新函数,前提是需要在app.json中开启下拉刷新。
  • onReachBottom监听用户上拉触底事件。
  • onPageScroll监听用户滑动页面事件。
  • onShareAppMessage监听用户点击转发按钮
  • onResize页面尺寸改变触发。
  • onTabltemTap当前页面是tab页时,点击tab触发。
Page({
  onPullDownRefresh(){
    console.log("下拉刷新")
  },
  onReachBottom(){
    console.log("触底")
  },
  onPageScroll(){
    console.log("页面滚动")
  },
  onShareAppMessage(){
    console.log("分享")
  },
  onResize(){
    console.log("页面尺寸改变")
  },
  onTabltemTap(){
    console.log("点击Tab")
  }
})

6.组件事件处理函数

  • page里面可以定义组件事件处理函数,通过bindtap绑定在page中定义的函数,点击的时候会触发。
<view bindtap="begin">点击</view>

Page({
    data:{
        value:"taoday"
    },
    begin(){
        console.log(this.data.value)
    }
})

7.小程序的生命周期

  • 小程序的生命周期是在app.js文件中定义的,在app.js中周期函数都包括在 App({})里面,这点是和页面周期函数有区别,app({})只能在app.js中调用,必须且只调用一次。
  • onLaunch监听小程序初始化。
  • onShow监听小程序启动或者切换到前台。
  • onHide监听小程序切换到后台。
  • onError监听错误函数。
  • onPageNotFound监听页面不存在函数。
App({
  onLaunch (options) {
    // Do something initial when launch.
  },
  onShow (options) {
    // Do something when show.
  },
  onHide () {
    // Do something when hide.
  },
  onError (msg) {
    console.log(msg)
  },
})

8.小程序常用语法

  • 小程序的语法和vue语法差不多,只是在局部会有一些差异,会vue那小程序的语法理解就方便很多了。
  • 数据绑定和vue一样,在pagedata设置好,在组件内通过双花括号{{}}包裹的形式调用,组件内使用data属性也要加双花括号。
  • wx:if条件渲染,类似于v-if
  • wx:for列表渲染,类似于v-for,只不过不需要在设置渲染的indexitem,默认的就是indexitem。也可以通过wx:for-index来指定下标名称,wx:for-item指定item名称,同样也可以嵌套渲染。wx:key指定唯一标识符。
<view class="index-container">
<van-button type="primary" wx:for="{{array}}" wx:key="index">{{item.name}}</van-button>
<van-button wx:if="{{flag}}">{{flag}}</van-button>
 </view>


Page({
  data:{
    value:'today',
    flag:true,
    array:[
      {name:"1"},
      {name:"1"},
      {name:"1"}
    ]
  }
})

9.使用第三方npm

  • 以有赞的vant-weapui框架为例,首先在小程序项目的根目录下载npm包,然后npm init,必须npm init,否则组件库就不会初始化,在开发工具构建npm包的时候会报错。
npm i vant-weapp -S --production
npm init
  • 打开微信开发者工具,点击 工具 -> 构建 npm,并勾选 使用 npm 模块 选项,构建完成后,即可引入组件,构建完之后会出现一个文件夹。


    image.png

    image.png
  • 在构建npm包的时候可能会有报错的情况,构建vant-weap就出现了一个错误,

VM6419:5 ./miniprogram_npm/_vant-weapp@0.5.12@vant-weapp/action-sheet/index.wxml

../wxs/utils.wxs not found from ./miniprogram_npm/_vant-weapp@0.5.12@vant-weapp/action-sheet/index.wxml

> 1 | <wxs src="../wxs/utils.wxs" module="utils" />

    | ^

  2 | 

  3 | <van-popup

  4 |   show="{{ show }}"
  • 解决方案就是把miniprogram_npm/vant-weapp里的组件文件夹都删除,之后再到https://github.com/youzan/vant-weapp下载一份vant, 将dist文件夹(vant-weapp-dev\vant-weapp-dev\dist)中的文件复制到miniprogram_npm/vant-weapp(即下载一份vant,之后替换掉项目中的文件)。

  • 使用组件在app.json或者每个单独页面的json文件配置。

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

推荐阅读更多精彩内容