1.[微信](file:///https://baike.baidu.com/item/微信/3905974)小程序(wei xin xiao cheng xu),简称[小程序](file:///https://baike.baidu.com/item/小程序),英文名Mini Program,是一种不需要下载安装即可使用的[应用](file:///https://baike.baidu.com/item/应用) ( 张小龙对其的定义是无需安装,用完即走,实际上是需要安装的,只不过小程序的体积特别小, 下载速度很快,用户感觉不到下载的过程 )
小程序刚发布的时候要求压缩包的体积不能大于1M,,否则无法通过,在2017年4月做了改进,由原来的1M提升到2M;
2017年1月9日0点,万众瞩目的微信第一批小程序正式低调上线。
同App进行互补,提供同app类似的功能,比app操作更加简洁的轻应用
通过扫一扫或者在微信搜索即可下载
用户使用频率不高,但又不得不用的功能软件,目前看来小程序是首选
连接线上线下
开发门槛低, 成本低
官网:[https://mp.weixin.qq.com/](file:///https://mp.weixin.qq.com/)
下载地址[https://mp.weixin.qq.com/debug/wxadoc/dev/devtools/download.html?t=2018315](file:///https://mp.weixin.qq.com/debug/wxadoc/dev/devtools/download.html?t=2018315)
准备小程序账号
小程序没有DOM对象,
组件化开发,具备特定功能效果的代码集合
体积小,单个压缩包体积不能大于2M,否则无法上线
小程序的四个重要文件的文件
小程序适配方案:rpx(response pixel)响应式像素单位
小程序适配单位:rpx
规定任何屏幕下宽度为750rpx
小程序会根据屏幕的宽度不同自动计算rpx值的大小
iphone6下:1rpx = 1物理像素 = 0.5px
设备 | rpx换算px(屏幕宽度/750) | px换算rpx(750/屏幕宽度) |
---|---|---|
IPhone5 | 1rpx = 0.42px | 1px = 2.34rpx |
IPhone6 | 1rpx = 0.5px | 1px = 2rpx |
IPhone6 Plus | 1rpx = 0.552px | 1px = 1.81rpx |
必备知识
**概念:**和Vue一样数据可以初始化在当前页面的管理内存的data中,页面中使用的数据会自动去data里找
初始化数据
*.js文件中的data选项中。
Page({
data: {
motto: '你好,欢迎来到音乐世界',
userInfo: {},
hasUserInfo: false,
},
使用数据
模板结构中使用双大括号{{message}}
注意事项:小程序中为单项数据流 model ---->> view
<view>{{message}}view>
修改数据
this.setData({
msg:'我是修改之后的数据'
})
Page({
/**
* 页面的初始数据
*/
data: {
msg: '开启小程序之旅'
},
/**
* 生命周期函数--监听页面加载
*/
onLoad: function (options) {
},
/**
* 生命周期函数--监听页面初次渲染完成
*/
onReady: function () {
},
/**
* 生命周期函数--监听页面显示
*/
onShow: function () {
},
/**
* 生命周期函数--监听页面隐藏
*/
onHide: function () {
},
/**
* 生命周期函数--监听页面卸载
*/
onUnload: function () {
},
/**
* 页面相关事件处理函数--监听用户下拉动作
*/
onPullDownRefresh: function () {
},
/**
* 页面上拉触底事件的处理函数
*/
onReachBottom: function () {
},
/**
* 用户点击右上角分享
*/
onShareAppMessage: function () {
}
})
冒泡事件:当一个组件上的事件被触发后,该事件会向父节点传递
冒泡事件列表:网络地址 [https://mp.weixin.qq.com/debug/wxadoc/dev/framework/view/wxml/event.html](file:///https://mp.weixin.qq.com/debug/wxadoc/dev/framework/view/wxml/event.html)
非冒泡事件:当一个组件上的事件被触发后,该事件不会向父节点传递
非冒泡事件:表单事件和自定义事件通常是非冒泡事件
[https://mp.weixin.qq.com/debug/wxadoc/dev/framework/view/wxml/event.html](file:///https://mp.weixin.qq.com/debug/wxadoc/dev/framework/view/wxml/event.html)
bind绑定:事件绑定不会阻止冒泡事件向上冒泡
<view bindtap="handleTap" class='start_container' bindtap="handleTap">
<text class='start'>开启小程序之旅text>
view>
catch绑定:事件绑定可以组织冒泡事件向上冒泡
<view catchtap="handleTap" class='start_container' bindtap="handleTap">
<text class='start'>开启小程序之旅text>
view>
组件
<view>
<swiper indicator-dots='true' indicator-color='deepPink'>
<swiper-item>
<image src='/images/detail/carousel/iqiyi.png'>image>
swiper-item>
<swiper-item>
<image src='/images/detail/carousel/vr.png'>image>
swiper-item >
<swiper-item>
<image src='/images/detail/carousel/wx.png'>image>
swiper-item >
swiper>
view>
模板
1). 定义模板:name=‘模板名字’
<template name='listTemplate'>
<view>
<text>tempalte contenttext>
view>
template>
2). 使用模板
<import src="./detail_template/detail_item_template.wxml" />
3). 使用模板样式
@import '../templates/list-template.wxss';
// 数据存储
wx.setStorage({
key: 'isCollected',
data: oldCollectFlag
})
let oldCollectFlag = wx.getStorageSync('isCollected');
事件委托给父元素
<swiper catchtap='imgToDetail' indicator-dots='true' indicator-color='deepPink'>
<swiper-item>
<image data-detailId='{{4}}' src='/images/detail/carousel/01.jpg'>image>
swiper-item>
<swiper-item>
<image data-detailId='{{5}}' src='/images/detail/carousel/02.jpg'>image>
swiper-item >
<swiper-item>
<image data-detailId='{{6}}' src='/images/detail/carousel/03.jpg'>image>
swiper-item >
swiper>
data-’传递数据key’ = value
target指向的是触发事件的元素
currentTarget指向的是捕获事件的元素currentTarget 和target的区别
发送请求
wx.request({ // 发送请求
url: API_URL, // 请求url
header: { // 设置请求头
'Content-type': 'json',
},
success: (res) => { // 请求成功的回调函数
// 隐藏提示加载信息
wx.hideToast();
console.log(res); // 请求的成功的数据对象,注意是封装后的对象
this.setData({movies: res.data.subjects})
}
})
1.a页面
wx.request({ // 发送请求
url: API_URL, // 请求的url
header: { // 设置请求头
'Content-type': 'json', },
success: (res) => { // 请求成功的回调函数
// 隐藏提示加载信息 wx.hideToast();
console.log(res); // 请求的成功的数据对象,注意是封装后的对象
this.setData({movies: res.data.subjects})
}
})
2.b页面
let appData = getApp();
onLoad: function (options) {
console.log(options.id);
console.log(appData.appData.movies);
this.setData({movie: appData.appData.movies[options.id]})
},