1. 配置

配置全解析

  • project.config.json ( 项目配置文件 )
{
// 文件描述
"description": "项目配置文件",
// 项目代码配置
"setting": {
// 是否检查 url 域名安全性和 TLS 版本
"urlCheck": false,
// 是否将项目的 es5 代码转成 es6
"es6": true,
// 是否自动补全 css 兼容前缀
"postcss": true,
// 是否压缩代码
"minified": true,
// 是否启用新功能
"newFeature": true
},
// 编译方式
"compileType": "miniprogram",
// 版本号
"libVersion": "1.7.2",
// appid
"appid": "touristappid",
// 项目名
"projectname": "haiyangbg",
// 项目配置
"condition": {
// 搜索关键字
"search": {
"current": -1,
"list": []
},
// 客服
"conversation": {
"current": -1,
"list": []
},
// 编译方式
"miniprogram": {
"current": -1,
"list": []
}
}
}
  • app.json ( 小程序配置 )
{
// 项目路由设置(第一项为首页)
"pages":[
"pages/index/index",
"pages/logs/logs"
],
// 窗口设置
"window":{
// 顶部导航栏背景色,必须是十六进制颜色值,如"#000000"
"navigationBarBackgroundColor": "#9ef468",
// 顶部导航栏显示文字
"navigationBarTitleText": "组件展示",
// 导航栏文字颜色,仅支持 black/white
"navigationBarTextStyle": "black",
// 下拉背景的文字样式,仅支持 dark/light
"backgroundTextStyle":"light",
// 下拉背景色,必须是十六进制颜色值,如"#000000"
"backgroundColor": "#333",
// 是否开启下拉刷新
"enablePullDownRefresh": true,
// 距离最底端触多少距离时触发触底事件,单位px
"onReachBottomDistance": 40
},
//网络请求过期时间,单位毫秒
"networkTimeout": {
// 普通ajax请求
"request": 20000,
// Socket请求
"connectSocket": 20000,
// 文件上传
"uploadFile": 20000,
// 文件下载
"downloadFile": 20000
},
// tab导航栏
"tabBar": {
// 文字的颜色
"color": "#999",
// 选中时文字的颜色
"selectedColor": "#000",
// 背景色
"backgroundColor": "#fff",
// 上边框的颜色,仅支持 black/white
"borderStyle": "black",
// tab导航栏显示在底部还是顶部(顶部不显示图片)
"position": "bottom",
// 导航栏列表项
"list": [{
// 导航到的页面路径
"pagePath": "pages/index/index",
// tab按钮上的文字
"text": "组件",
// 图片路径
"iconPath": "img/com-l.png",
// 选中后显示的图片
"selectedIconPath": "img/com-d.png"
},{
"pagePath": "pages/logs/logs",
"text": "API",
"iconPath": "img/api-l.png",
"selectedIconPath": "img/api-d.png"
}]
},
// 调试信息
"debug": true
}
  • page.json ( 单页面配置 )

单页面的json就是app.jsonwindow字段,当加载到这个页面时,此配置将覆盖app.json

2. 生命周期

  • 小程序 App 生命周期
  • onLaunch ------ 小程序初始化完成时,触发(只会调用一次)
  • onShow ------ 1. 小程序启动 2. 从后台进入前台显示,触发
  • onHide ------ 当小程序从前台进入后台,触发
  • onError ------ 1. 发生脚本错误 2. api 调用失败,触发并带上错误信息

  • 单页面 Page 生命周期
  • onLoad ------ 页面加载时,触发(只会调用一次)
  • onShow ------ 页面显示时,触发
  • onReady ------ 初次渲染完成时,触发(只会调用一次)
  • onHide ------ 页面隐藏时,触发
  • onUnload ------ 页面卸载时,触发

详细的生命周期分类:

1.小程序启动:

App.onLaunch - -> App.onShow - -> 注册app.json pages里的页面(按索引顺序) - -> 将app路由设置为首页路由 - -> 首页page参数深拷贝 - -> 初始化首页 data - -> Page.onLoad - -> Page.onShow - -> Page.onReady

2.切后台(app 和 page 生命周期重合):

小程序被切到后台 - -> page.onHide - -> App.onHide - -> 切回小程序 - -> App.onShow - -> page.onShow

3.跳转页面:

old 表示前一个页面, new 表示新页面

  1. navigateTo跳转 - -> 将路由设置为目标页面路由 - -> old.onHide - -> 初始化页面 data - -> new.onLoad - -> new.onShow - -> new.onReady
  2. redirectTo重定向 - -> 设置路由 - -> old.onUnload - -> init data - -> new.onLoad - -> new.onShow - -> new.onReady
  3. navigateBack页面返回 - -> 设置路由 - -> old.onUnload - -> init data - -> new.onShow
  4. reLaunch重启动 - -> 设置路由 - -> old.onUnload - -> init data - -> new.onLoad - -> new.onShow - -> new.onReady
  5. switchTabTab 切换(图截自官方文档)

3. 数据绑定和渲染

  1. 数据绑定: { { message } }
  2. 渲染

    • 列表渲染:

      - wx:for=" { { message } } "
      - wx:for-index="idx" (设置索引的变量名,默认 index )
      - wx:for-item="itemName"(设置每一项的变量名,默认item )
    • 渲染块:<block> </block>
    • 条件渲染:

      - wx:if="boolean" - wx:elif="boolean" -wx:else="boolean" == (if - else if - if)
      - hidden="boolean"

4. 模板(template)

基本用法

( 定义代码片段,可以在不同的地方调用,使用 name 属性,作为模板的名字,调用时使用 is 属性 )

// 源码(需要和调用的页面在同一个wxml里)
<template name="template">
<view>
I am {{ name }}
</view>
</template> // 调用
<template is="template" data="{{...message}}"/> // js 数据
Page({
data: {
message: {
name: '海洋饼干'
}
}
})

进阶用法

当时很多的页面都需要同一个模板时,就需要模板导入了

先在pages文件夹中新建一个template文件夹,文件夹中新建一个template.wxml文件

// template.wxml
<template name="template">
<view>
I am {{ name }}
</view>
</template>
// page.wxml 调用
<import src ="../template/template.wxml"/>
<template is="template" data="{{...message}}"/> // js 数据
Page({
data: {
message: {
name: '海洋饼干'
}
}
})

5. 事件

事件列表

  1. 点击 事件

    • 点击事件 tap
    • 长按事件(超过0.35秒) longpress
  2. 触摸 事件

    • 触摸开始 touchstart
    • 触摸后开始移动 touchmove
    • 触摸后被打断 touchcancel
    • 触摸结束 touchend
  3. 动画 事件

    • 过渡完成时触发 transitionend
    • 动画开始时触发 animationstart
    • 一次迭代结束时触发 animationiteration
    • 动画完成时触发 animationend

事件冒泡,事件捕获

  1. 绑定事件 + 冒泡:bind + 事件名 , 如 bindtap
  2. 绑定事件 + 阻止冒泡:catch + 事件名 , 如 catchtap

  1. 捕获 + 冒泡:capture-bind: + 事件名 , 如 capture-bind:tap
  2. 捕获 + 中断事件 + 取消冒泡:capture-catch: + 事件名 , 如 capture-catch:tap

事件对象

  • BaseEvent( 基础事件,所有事件的父类 )

    • type ( String - 事件类型 )
    • timeStamp ( Integer - 事件生成时的时间戳 )
    • target ( Object - 触发事件的组件的属性 )

      • id ( String - 事件源的id )
      • tagName ( String - 当前组件的类型 )
      • dataset ( Object - 事件源组件上由data-开头的自定义属性集合 )
    • currentTarget ( Object - 当前组件的属性 )

      • 同 target
  • TouchEvent ( 触摸事件 )

    • touches ( Array 停留在屏幕中的触摸点的信息对象集合 )

      • identifier ( Number - 触摸点的标识符 )
      • pageX ( Number - 距文档左上角 x 轴的距离 )
      • pageY ( Number 距文档左上角 y 轴的距离 )
      • clientX ( Number 距页面可显示区域 x 轴的距离 )
      • clientY ( Number 距页面可显示区域 y 轴的距离 )
    • changedTouches ( Array 变化的触摸点信息对象集合 )
  • CustomEvent ( 自定义事件 )

    • detail ( Object - 自定义事件额外的信息 )

6. wxs 模块

wxs 文件就是 js 文件,引入 wxs 文件就是引入一个 js 模块( 不能用es6 ),现有两种引入方式

  1. wxml 里引用,使用 <wxs> 标签
    1.1. module 必填,为当前模块的模块名
    1.2. src 选填,引用 .wxs 文件的相对路径(仅当标签为 单闭合标签 标签的内容为空 时有效)
    1.3. 例

       引入:<wxs src="./index.wxs" module="index" />
    
       自己撸:
    <wxs module="index">
    var foo = '海洋饼干'
    module.exports = {
    foo
    }
    </wxs>
  2. wxs 里引用,使用 require 引用
    2.1. 例 var tools = require("./tools.wxs")

7. wxss 样式

微信版的 css ,几个不同的地方

  1. 添加 自适应尺寸单位 ( rpx )
  2. 添加 导入外联样式 ( @import )
  3. 精减 css选择器,只支持

    1. 类选择器 .class
    2. id选择器 #id
    3. 标签选择器 element
    4. 兄弟选择器 element1,element2
    5. 伪元素选择器 只支持两种 ::after ::before

8. 自定义组件

使用自定义组件

  1. 创建自定义组件( 类似于page,但需要在 json 文件中将 component 字段设为 true

    {
    "component": true
    }
  2. 创建组件构造器 ( 构造函数不是page(),而是Component() )

    Component({
    // 组件的对外属性(父组件传的数据)
    properties: {
    msg: {
    type: String,
    value: 'msg',
    // 父组件值改变时触发的回调
    observer: () => {
    console.log('i am change')
    }
    }
    },
    data: {
    componentData: {}
    },
    })
  3. 使用自定义组件( 先要在页面的 json 文件中进行引用声明 )

    // 先引用声明
    "usingComponents": {
    // hybg 标签名
    "hybg": "../component/component" // 相对路径
    } // 直接使用,需要的话要绑定数据
    <hybg msg="{{ data }}"></hybg>

slot 模板

 1. 单 solt
```
// component
<view>
<slot></slot>
</view> // page ( hybg 是上面的组件标签名)
<hybg>
<view> page 的 slot </view>
</hybg> // 效果
<view>
<view> page 的 slot </view>
</view> ```
2. 多slot
```
// 先在 Component 的 js 中添加
options: {
// 启用多slot
multipleSlots: true
},
// 多 slot 需要使用不同的 name 来区分
<view>
<slot name="first"></slot>
<slot name="last"></slot>
</view> // page ( hybg 是上面的组件标签名)
<hybg>
<view slot="first"> first -- slot </view>
<view slot="last"> last-- slot </view>
</hybg> // 效果
<view>
<view slot="first"> first -- slot </view>
<view slot="last"> last-- slot </view>
</view> ```

父子组件事件(子组件传值)

// page
fatherEvent: function(e){
console.log(e.detail) // 组件传递的自定义信息
}
<hybg bindhybgEvent="fatherEvent"></hybg> // component
tap: function(){
var myEventDetail = { a: 10} // detail对象,提供给事件监听函数
var myEventOption = {} // 触发事件的配置选项
// bubbles 事件是否冒泡
// capturePhase 事件是否拥有捕获阶段
// composed 是否可以穿越父组件边界
this.triggerEvent('hybgEvent', myEventDetail, myEventOption)
} <view bindtap="tap">触发 hybgEvent 事件</view>

微信小程序 — 速学速查笔记的更多相关文章

  1. 微信小程序计算器Bug版=-=(笔记)

    微信小程序计算器BUG版本 无APPID的测试号登录,先在app.json中更改路径,以及修改头部信息. 首先一个输入框字段用{{screenData}} 功能可以退格,清屏,正负号,正常操作加减乘除 ...

  2. 微信小程序踩坑集合

    1:官方工具:https://mp.weixin.qq.com/debug/w ... tml?t=1476434678461 2:简易教程:https://mp.weixin.qq.com/debu ...

  3. 微信小程序开发学习资料

    作者:初雪链接:https://www.zhihu.com/question/50907897/answer/128494332来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明 ...

  4. 支付宝小程序和微信小程序的区别(部分)

    支付宝小程序和微信小程序之间的互相转换 1.首先是文件名 微信小程序 wxss ------ 支付宝小程序 acss 微信小程序 wxml ------ 支付宝小程序 axml 2.调用方法前缀 微信 ...

  5. WordPress版微信小程序安装使用说明

    昨天在群里,有刚刚使用WordPress版微信小程序朋友,在问安装过程中的问题,这些问题是经常被问到,这至少说明两个问题: 1.我开发的程序安装和使用不够简易,无法通过简单的配置就可以使用,特别是如果 ...

  6. 图解微信小程序---获取电影信息

    图解微信小程序---获取电影信息 代码笔记 第一步:编写js文件,调用api获取相对应电影详情信息(注意带入的参数是id不在是榜单的type,电影api的movie后面又斜杠,别忘了,对应的绑定数据的 ...

  7. 图解微信小程序---获取电影列表

    图解微信小程序---获取电影列表 代码笔记 list跳转 第一步:编写前端页面获取相关的电影列表参数(对于显示参数不熟悉,可以先写js,通过console  Log的方式获取我们电影的相关数据字段,后 ...

  8. 图解微信小程序---轮播图

    图解微信小程序---轮播图 代码笔记 第一步:在页面创建swiper组件 第二步:编写js页面 注意事项:wx:for渲染我们js中的图片数组,item默认写法,获取我们的图片数组中的图片,可通过增加 ...

  9. 咫尺论坛|即速应用-微信小程序社区

    咫尺论坛|即速应用-微信小程序社区 是一个集微信和支付宝小程序行业资讯.开发资源.技术交流于一身的大型小程序开发论坛,成立伊始便迅速聚集了一大批小程序开发爱好者,短时间内成为了国内领先的小程序开发者社 ...

  10. 即速应用_微信小程序开发 http://www.jisuapp.cn/

    即速应用_微信小程序开发   http://www.jisuapp.cn/

随机推荐

  1. CentOS 7 关闭Selinux

    临时关闭: [root@localhost ~]# getenforceEnforcing [root@localhost ~]# setenforce 0[root@localhost ~]# ge ...

  2. 多边形面积(Area_Of_Polygons)

    原理: 任意多边形的面积可由任意一点与多边形上依次两点连线构成的三角形矢量面积求和得出. 分析: 由于给出的点是相对于我们的坐标原点的坐标,每个点实际上我们可以当作一个顶点相对于原点的向量,如下图所示 ...

  3. leetcode hard

    # Title Solution Acceptance Difficulty Frequency     4 Median of Two Sorted Arrays       27.2% Hard ...

  4. 如何给Word参考文献加方括号

    脚注是在页面下端添加的注释,如添加在一篇论文首页下端的作者情况简介:尾注是在文档尾部(或节的尾部)添加的注释,如添加在一篇论文末尾的参考文献目录. 若用手工添加脚注和尾注,则既麻烦又易出错.当用Wor ...

  5. 04 Websocket和Websocketed

    一.web socket事件和方法 有了HTTP协议为什么还需要Websocket这种协议呢?因为HTTP协议发起的通信只能通过客户端发起,然后服务端才可以将消息回应到客户端.因此HTTP协议做不到服 ...

  6. 把两个object对象合并成一个对象 属性名称相同的变为后面对象的值

    object.assign(from,obj)------object.assign(目标对象,被合并的对象)

  7. Echarts常见问题汇总

    关于echarts使用的常见问题总结  来源:李文杨 关于echarts使用的问题总结1.legend图例不显示的问题:在legend中的data为一个数组项,数组项通常为一个字符串,每一项需要对应一 ...

  8. python异步IO编程(二)

    python异步IO编程(二) 目录 开门见山 Async IO设计模式 事件循环 asyncio 中的其他顶层函数 开门见山 下面我们用两个简单的例子来让你对异步IO有所了解 import asyn ...

  9. 3、Eclipse 的SVN 插件

    3.Eclipse 的SVN 插件 3.1 简介 Subversive Eclipse 团队开发的SVN 插件. Subclipse Apache 的SVN 团队开发的Eclipse 插件. 3.2 ...

  10. Spark写入HBase(Bulk方式)

    在使用Spark时经常需要把数据落入HBase中,如果使用普通的Java API,写入会速度很慢.还好Spark提供了Bulk写入方式的接口.那么Bulk写入与普通写入相比有什么优势呢? BulkLo ...