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. CentOS7部署Tomcat服务器

    1. 软件 存放路径:/usr/local/src apache-tomcat-9.0.22.tar.gz openjdk-12_linux-x64_bin.tar.gz 2.事先配置 启动后关闭防火 ...

  2. Git复习(十三)之git revert用法及与git reset区别

    git revert用法以及与git reset的区别 git revert用法 git revert 撤销 某次操作,此次操作之前和之后的commit和history都会保留,并且把这次撤销 作为一 ...

  3. Sklearn使用良心完整入门教程

    The complete .ipynb file can be download through my share in onedrive:https://1drv.ms/u/s!Al86h1dThX ...

  4. thinkphp3.2.3 自动验证 unique 出错的解决办法

    场景:修改数据时,唯一验证name字段出错,提示已存在. 排查: 1.传入的参数是否包含主键,因为 D('模型名')->create() 会自动判断是否是新增或者修改,根据传入的参数判断是否包含 ...

  5. 03 python3常见内置函数

    数学相关 abs(a) : 求取绝对值.abs(-1) max(list) : 求取list最大值.max([1,2,3]) min(list) : 求取list最小值.min([1,2,3]) su ...

  6. Java高并发程序设计学习笔记(二):多线程基础

    转自:https://blog.csdn.net/dataiyangu/article/details/86226835# 什么是线程?线程的基本操作线程的基本操作新建线程调用run的一种方式调用ru ...

  7. Spring Boot整合dubbo(注解的方式)

    一.创建项目 1.创建一个空的项目 2.在空的项目中添加两个Spring Boot模块,如下图所示 二.在provider模块中的pom文件中添加依赖 <dependency> <g ...

  8. python中re模块

    1.定义 正则表达式是一个特殊的字符序列,能方便的检查一个字符串是否与某种模式匹配.re模块使得python拥有全部的正则表达式功能. 2.用途 通过使用正则表达式,可以:测试字符串内的模式.—— 例 ...

  9. php 多肽实例

    多态定义:只关心一个接口或者基类,而不关心一个对象的具体类.(同一类型,不同结果) 这里两个例子: 第一个,我们发现,基类定义了标准,子类进行了自我规则的实现.这是多态的一个要求.同时,这是满足重写: ...

  10. 第三方库-时间函数dateutil

    在dateutil中,吸引我的东西有2个,1个是parser,1个是rrule. 其中parser是根据字符串解析成datetime,而rrule是则是根据定义的规则来生成datetime. 安装没必 ...