| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 移动开发 -> 微信小程序开发文档-萧然 8.28 -> 正文阅读 |
|
[移动开发]微信小程序开发文档-萧然 8.28 |
准备工作? 微信小程序官网 https://mp.weixin.qq.com/ ? 注册微信小程序开发: ? 请选择注册的帐号类型 ,选择小程序 填写相关信息 1.小程序基本搭建1.1创建微信小程序项目打开微信开发工具后左上角有个项目点击 新建项目 选择小程序,项目名称自己命名 ,目录 新建个文件夹存放 App ID就是官网中开发管理里面的开发设置给定开发者ID直接复制过来,开发模式选择小程序,后端服务选择 不使用云服务,语言选择JavaScript 1.2文件说明? 默认配置 ? 小程序根目录下的 ? sitemap 配置小程序根目录下的
详情见小程序开发目录结构:https://developers.weixin.qq.com/miniprogram/dev/framework/structure.html 1.2.1 app.json 必要属性介绍? app.json中必要参数配置pages,为小程页面路径列表,每新建一个页面这里会自动将路径填入 ? window属性配置全局的默认窗口表现:
更多参数见配置项window:https://developers.weixin.qq.com/miniprogram/dev/reference/configuration/app.html#window
单页面配置大于全局属性配置如 1.3 创建新页面直接新建文件夹然后鼠标移动至文件夹上右击page,会自动生成四个文件,命名.js 命名.json 命名.wxml 命名.wxss 1、Flex 布局
2、移动端相关知识点1.物理像素
2.设备独立像素 、 css 像素
3、移动端适配方案1.viewport 适配
2.rem 适配
3.视图层详解
1.WXML样式文件详解
为了适应广大的前端开发者,WXSS 具有 CSS 大部分特性。同时为了更适合开发微信小程序,WXSS 对 CSS 进行了扩充以及修改。
当页面文件在同一级目录下且命名相同(后缀不同), Ⅰ-尺寸单位
Ⅱ-样式导?Ⅲ-内联样式
2.WXML语法详解Ⅰ-数据绑定与写法规则1) 单向简单数据绑定
2)运算Ⅱ-列表渲染1)wx:for
2) wx:key
①
|
路由方式 | 页面栈表现 | 触发时机 | 路由前页面 | 路由后页面 |
---|---|---|---|---|
初始化 | 新页面入栈 | 小程序打开的第一个页面 | onLoad, onShow | |
打开新页面 | 新页面入栈 | 调用 API wx.navigateTo 使用组件 | onHide | onLoad, onShow |
页面重定向 | 当前页面出栈,新页面入栈 | 调用 API wx.redirectTo 使用组件 | onUnload | onLoad, onShow |
页面返回 | 页面不断出栈,直到目标返回页 | 调用 API wx.navigateBack 使用组件 用户按左上角返回按钮 | onUnload | onShow |
Tab 切换 | 页面全部出栈,只留下新的 Tab 页面 | 调用 API wx.switchTab 使用组件 用户切换 Tab | 各种情况请参考下表 | |
重启动 | 页面全部出栈,只留下新的页面 | 调用 API wx.reLaunch 使用组件 | onUnload | onLoad, onShow |
3.代码示例
wx.navigateTo({ //当前页面被隐藏,缓存在栈中,最多存放10个页面
url: "/pages/posts/post" //跳转的页面路径
})
wx.redirectTo({ //当前页面被销毁
url: "/pages/posts/post"
})
4.Tab 切换对应的生命周期(以 A、B 页面为 Tabbar 页面,C 是从 A 页面打开的页面,D 页面是从 C 页面打开的页面为例):
当前页面 | 路由后页面 | 触发的生命周期(按顺序) |
---|---|---|
A | A | Nothing happend |
A | B | A.onHide(), B.onLoad(), B.onShow() |
A | B(再次打开) | A.onHide(), B.onShow() |
C | A | C.onUnload(), A.onShow() |
C | B | C.onUnload(), B.onLoad(), B.onShow() |
D | B | D.onUnload(), C.onUnload(), B.onLoad(), B.onShow() |
D(从转发进入) | A | D.onUnload(), A.onLoad(), A.onShow() |
D(从转发进入) | B | D.onUnload(), B.onLoad(), B.onShow() |
navigateTo
,redirectTo
只能打开非 tabBar 页面。switchTab
只能打开 tabBar 页面。reLaunch
可以打开任意页面。- 页面底部的 tabBar 由页面决定,即只要是定义为 tabBar 的页面,底部都有 tabBar。
- 调用页面路由带的参数可以在目标页面的
onLoad
中获取。
1.创建文件夹 命名NavHeader
2.新建Component 命名NavHeader
// components/NavHeader/NavHeader.json { "component": true,// 1.将 component 字段设为 true 可将这一组文件设为自定义组件 "usingComponents": { "NavHeader" : "/components/NavHeader/NavHeader"//注册 } }
// components/NavHeader/NavHeader.wxml //2.在 wxml 文件中编写组件模板,在 wxss 文件中加入组件样式,它们的写法与页面的写法类似。具体细节和注意事项参见 组件模板和样式 。 <view class="header"> <text class="title">{{title}}</text> <view> <text>{{nav}}</text> <text class="more">查看更多</text> </view> </view>
//components/NavHeader/NavHeader.wxss ///* 3.这里的样式只应用于这个自定义组件 */ .header{ padding-bottom: 20rpx; } .header .title{ font-size: 32rpx; line-height: 80rpx; color: #666; } .header .more{ float: right; border: 1rpx solid #333; padding: 10rpx 20rpx; font-size: 24rpx; border-radius: 30rpx; }
注意:在组件wxss中不应使用ID选择器、属性选择器和标签名选择器。
在自定义组件的
js
文件中,需要使用Component()
来注册组件,并提供组件的属性定义、内部数据和自定义方法。组件的属性值和内部数据将被用于组件
wxml
的渲染,其中,属性值是可由组件外部传入的。更多细节参见 Component构造器 。// components/NavHeader/NavHeader.js Component({ /** *4.组件的属性列表 两个默认值 使用时传入参数 */ properties: { title:{ type:String, value:'title默认值' }, nav:{ type:String, value:'nav默认值' } }, /** * 组件的初始数据 */ data: { }, /** * 组件的方法列表 */ methods: { } })
使用自定义组件需要在相对于 json文件中引用
//5. { "usingComponents": { "NavHeader" : "/components/NavHeader/NavHeader" } }
使用效果
1、swiper 滑块视图容器。其中只可放置swiper-item组件,否则会导致未定义的行为。
2、swiper-item 仅可放置在swiper组件中,宽高自动设置为100%。xun’hua
常用来作为轮播组件
3、常用参数
属性 | 类型 | 默认值 | 必填 | 说明 | 最低版本 |
---|---|---|---|---|---|
indicator-dots | boolean | false | 否 | 是否显示面板指示点 | 1.0.0 |
indicator-color | color | rgba(0, 0, 0, .3) | 否 | 指示点颜色 | 1.1.0 |
indicator-active-color | color | #000000 | 否 | 当前选中的指示点颜色 | 1.1.0 |
autoplay | boolean | false | 否 | 是否自动切换 | 1.0.0 |
circular | boolean | false | 否 | 是否采用衔接滑动 | 1.0.0 |
详情见官网说明----->视图容器/swiper
分为
应??命周期
和???命周期
关于小程序前后台的定义和小程序的运行机制,请参考运行机制章节。
1.页面生命周期表
属性 | 类型 | 说明 |
---|---|---|
data | Object | 页面的初始数据 |
options | Object | 页面的组件选项,同 Component 构造器 中的 options ,需要基础库版本 2.10.1 |
onLoad | function | 生命周期回调—监听页面加载 |
onShow | function | 生命周期回调—监听页面显示 |
onReady | function | 生命周期回调—监听页面初次渲染完成 |
onHide | function | 生命周期回调—监听页面隐藏 |
onUnload | function | 生命周期回调—监听页面卸载 |
onPullDownRefresh | function | 监听用户下拉动作 |
onReachBottom | function | 页面上拉触底事件的处理函数 |
onShareAppMessage | function | 用户点击右上角转发 |
onShareTimeline | function | 用户点击右上角转发到朋友圈 |
onAddToFavorites | function | 用户点击右上角收藏 |
onPageScroll | function | 页面滚动触发事件的处理函数 |
onResize | function | 页面尺寸改变时触发,详见 响应显示区域变化 |
onTabItemTap | function | 当前是 tab 页时,点击 tab 时触发 |
2.示例代码
//index.js Page({ data: { text: "This is page data." }, onLoad: function(options) { // Do some initialize when page load. }, onShow: function() { // Do something when page show. }, onReady: function() { // Do something when page ready. }, onHide: function() { // Do something when page hide. }, onUnload: function() { // Do something when page close. }, onPullDownRefresh: function() { // Do something when pull down. }, onReachBottom: function() { // Do something when page reach bottom. }, onShareAppMessage: function () { // return custom share data when user share. }, onPageScroll: function() { // Do something when page scroll }, onResize: function() { // Do something when page resize }, onTabItemTap(item) { console.log(item.index) console.log(item.pagePath) console.log(item.text) }, // Event handler. viewTap: function() { this.setData({ text: 'Set some data for updating view.' }, function() { // this is setData callback }) }, customData: { hi: 'MINA' } })
wx.request(Object object)
以 Promise 风格 调用:不支持
小程序插件:支持,需要小程序基础库版本不低于 1.9.6
发起 HTTPS 网络请求。使用前请注意阅读相关说明。
必要参数
url
开发者服务器接口地址
接口说明说明: 调用此接口 , 可获取 banner( 轮播图 ) 数据
? 接口地址 : /banner
? 请求方式: GET
? 可选参数 :type:资源类型,对应以下类型,默认为 0 即 PC
- 0 PC
- 1 android
- 2 iphone
- 3 ipa
代码示例
wx.request({ url: 'http://localhost:3000/banner',//请求路径 data: {type:2},//携带参数 success: (res)=>{//成功回调 console.log('请求成功',res) }, fail:(err) => {//失败回调 console.log('请求失败',err) } })
使用封装后代码示例
data: { bannerList:[],// 轮播图数据 recommendList:[],// 推荐歌单 topList:[],// 排行榜数据 }, Page({ /** * 页面的初始数据 */ data: { bannerList:[],// 轮播图数据 }, /** * 生命周期函数--监听页面加载 */ onLoad: async function (options) { //0 PC 1 android 2 iphone 3 ipad let bannerListData = await request('/banner',{type:2}); this.setData({ bannerList:bannerListData.banners }) }
wx.setStorageSync(string key, any data) | 微信开放文档 (qq.com)
示例代码
存储
import request from '../utils/request' async login(){ //1.收集表单项数据 let {phone,password} = this.data if(!phone){ //提示用户 wx.showToast({ title: '手机号不能为空', icon:'none' }) return; } //定义正则表达式 let phoneReg = /^1(3|4|5|6|7|8|9)\d{9}$/; if(!phoneReg.test(phone)){ wx.showToast({ title: '手机号格式错误', icon:'none' }) return; } if(!password){ wx.showToast({ title: '密码不能为空', icon:'none' }) return; } //后端验证 let result = await request('/login/cellphone',{phone,password}) if(result.code === 200){ //登录成功 wx.showToast({ title: '登录成功', }) //将用户的信息存储至本地 wx.setStorageSync('userInfo', JSON.stringify(result.profile)) //转成字符串 //跳转至个人中心personal页面 wx.reLaunch({ url: '/pages/personal/personal', }) }else if(result.code === 501){ wx.showToast({ title:'手机号错误', icon:'none' }) }else if(result.code === 502){ wx.showToast({ title:'密码错误', icon:'none' }) }else{ wx.showToast({ title:'登录失败', icon:'none' }) } }
取出
import request from '../utils/request' /pages/personal/personal.js 文件 /** * 生命周期函数--监听页面加载 */ onLoad: function (options) { //读取用户基本信息 let userInfo = wx.getStorageSync('userInfo'); //console.log('userInfo:',userInfo)//字符串 //userId:536011793 ///user/record?uid=536011793&type=1 if(userInfo){ //更新userInfo状态 this.setData({ userInfo:JSON.parse(userInfo) }) //console.log(this.data.userInfo.userId) //获取用户播放记录 this.getUserRecentPlayList(this.data.userInfo.userId) } },
由于程序请求通常使用较多所以把请求功能函数封装
代码示例
export default{ host:'http://localhost:3000', mobilehost:'http://5fdswm.natappfree.cc' }
//发送ajax请求 /* 1.封装功能函数 1.功能点明确 2.函数内部应该保留固定代码(静态的) 3.将动态的数据抽取成形参,由使用者根据自身的情况动态传入实参 2. 封装功能组件 1.功能点明确 2.组件内部保留静态的代码 3.将动态的数据抽取成props参数,由使用者根据自身的情况以标签属性的形式动态传入props数据 4.一个良好的组件应该设置组件的必要性及数据类型 */ import config from './config' //引用路径配置 拼接 export default(url,data={},method='GET') => { return new Promise((resolve,rejext) => { // 1.new Promise初始化promise实例的状态为pending wx.request({ url:config.host+url,//本地host 内网穿透mobilehost data, method, success: (res)=>{ //console.log('请求成功',res); resolve(res.data);//reso;ve修改promise的状态为成功的状态resolved }, fail:(err) => { //console.log('请求失败',err); rejext(err);//rejext修改promise的状态为失败状态 rejected } }) }) }
安装环境 node.js 运行本地服务器
找到相应服务器路径 node app.js 启动服务器
访问
NATAPP
注册后购买免费隧道
隧道配置
新建config.ini 文件
#在命令行参数模式如 natapp -authtoken=xxx 等相同参数将会覆盖掉此配置
#命令行参数 -config= 可以指定任意config.ini文件
[default]
authtoken= 46b400d3b504d011 #对应一条隧道的authtoken
clienttoken= #对应客户端的clienttoken,将会忽略authtoken,若无请留空,
log=stdout #log 日志文件,可指定本地文件, none=不做记录,stdout=直接屏幕输出 ,默认为none
loglevel=ERROR #日志等级 DEBUG, INFO, WARNING, ERROR 默认为 DEBUG
http_proxy= #代理设置 如 http://10.123.10.10:3128 非代理上网用户请务必留空
启动内网穿透
浏览器输入路径
http://localhost:4040/http/in
获取本次外网地址
访问
更改小程序请求路径配置后使用手机端真机调试
示例代码
<!-- 导航区域 wxml -->
<scroll-view scroll-x="true" class="navScroll" enable-flex="true">
<!-- 开启横向滑动 启用 flexbox 布局。开启后,当前节点声明了 display: flex 就会成为 flex container,并作用于其孩子节点。-->
<view class="navItem">
<view class="navContent">
推荐
</view>
</view>
<view class="navItem">
<view class="navContent active">
世界上的另一个我
</view>
</view>
<view class="navItem">
<view class="navContent">
推荐
</view>
</view>
<view class="navItem">
<view class="navContent">
世界上的另一个我
</view>
</view>
<view class="navItem">
<view class="navContent">
推荐
</view>
</view>
<view class="navItem">
<view class="navContent">
世界上的另一个我
</view>
</view>
<view class="navItem">
<view class="navContent">
推荐
</view>
</view>
<view class="navItem">
<view class="navContent">
世界上的另一个我
</view>
</view>
<view class="navItem">
<view class="navContent">
推荐
</view>
</view>
<view class="navItem">
<view class="navContent">
世界上的另一个我
</view>
</view>
</scroll-view>
/*导航区域 wxss*/
.navScroll{
display: flex;
white-space: nowrap;/*规定段落中的文本不进行换行*/
height: 60rpx;
}
.navScroll .navItem {
padding: 0 30rpx;
font-size: 28rpx;
height: 60rpx;
line-height: 60rpx;
}
.navScroll .navContent {
height: 60rpx;
box-sizing: border-box;
}
.navItem .active {
border-bottom: 1rpx solid #d43c33;
}
|
移动开发 最新文章 |
Vue3装载axios和element-ui |
android adb cmd |
【xcode】Xcode常用快捷键与技巧 |
Android开发中的线程池使用 |
Java 和 Android 的 Base64 |
Android 测试文字编码格式 |
微信小程序支付 |
安卓权限记录 |
知乎之自动养号 |
【Android Jetpack】DataStore |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/24 23:39:25- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |