微信小程序三个实例带你入门
微信小程序三个实例带你入门
前置说明
- 新建微信小程序项目时,默认使用云开发服务(不需要云开发可以关闭)
项目目录及文件含义查看微信官方文档
app.json部分重点说明
开发一个默认页面
我们新建componet文件夹,在componet中新建submit文件夹,最后新建名为submit的page页,结果如下。
然后在app.json中配置一个默认页面“componet/submit/submit"。
最后在submit.js中配置加载数据,在submit.json中配置导航栏及标签栏数据,在wxml配置页面结构,在wxss中配置结构样式,ctrl+s或直接保存运行,结果如下。
开发一个数据动态变化的单页面(以用户授权为例)
效果图展示:
讲解:
我们可以在onload加载方法中或者在任意一个自定义的绑定函数或者监听函数中通过this.setData({key:value})的形式对数据重新赋值,之后该数据就会动态呈现在页面中,本实例中奖获取到的userInfo对象数据显示在单个页面中,源码展示。
js源码:
const app = getApp() Page({ data: { //判断小程序的API,回调,参数,组件等是否在当前版本可用。 canIUse: wx.canIUse('button.open-type.getUserInfo'), isHide: false, userInfo:{}, haveUser:false }, onLoad: function () { var that = this; // 查看是否授权 wx.getSetting({ success: function (res) { if (res.authSetting['scope.userInfo']) { wx.getUserInfo({ success: function (res) { wx.login({ success: res => { // 获取到用户的 code 之后:res.code console.log("用户的code:" + res.code); // 可以传给后台,再经过解析获取用户的 openid // 或者可以直接使用微信的提供的接口直接获取 openid ,方法如下: // wx.request({ // // 自行补上自己的 APPID 和 SECRET // url: 'https://api.weixin.qq.com/sns/jscode2session?appid=自己的APPID&secret=自己的SECRET&js_code=' + res.code + '&grant_type=authorization_code', // success: res => { // // 获取到用户的 openid // console.log("用户的openid:" + res.data.openid); // } // }); } }); } }); } else { // 用户没有授权 // 改变 isHide 的值,显示授权页面 that.setData({ isHide: true }); } } }); }, bindGetUserInfo: function (e) { if (e.detail.userInfo) { //用户按了允许授权按钮 var that = this; // 获取到用户的信息了,打印到控制台上看下 app.globalData.userInfo = e.detail.userInfo; //授权成功后,通过改变 isHide 的值,让实现页面显示出来,把授权页面隐藏起来 that.setData({ isHide: false, haveUser:true, userInfo:e.detail.userInfo }); } else { //用户按了拒绝按钮 wx.showModal({ title: '警告', content: '您点击了拒绝授权,将无法进入小程序,请授权之后再进入!!!', showCancel: false, confirmText: '返回授权', success: function (res) { // 用户没有授权成功,不需要改变 isHide 的值 if (res.confirm) { console.log('用户点击了“返回授权”'); } } }); } } })
需要提示点:this在上述函数中仅在最外层可用,若函数中嵌套函数,则嵌套函数中的this表示的是该嵌套函数,解决办法:声明var that = this
,使用that代表app自身。
json源码:
{ "navigationBarTitleText": "登录" }
wxss源码:
.header { margin: 90rpx 0 90rpx 50rpx; border-bottom: 1px solid #ccc; text-align: center; width: 650rpx; height: 300rpx; line-height: 450rpx; } .header image { width: 200rpx; height: 200rpx; } .content { margin-left: 50rpx; margin-bottom: 90rpx; } /**index.wxss**/ .userinfo { display: flex; flex-direction: column; align-items: center; } .userinfo-avatar { width: 128rpx; height: 128rpx; margin: 20rpx; border-radius: 50%; } .userinfo-nickname { color: #aaa; } .usermotto { margin-top: 200px; } .content text { display: block; color: #9d9d9d; margin-top: 40rpx; } .bottom { border-radius: 80rpx; margin: 70rpx 50rpx; font-size: 35rpx; }
wxml源码:
<view wx:if="{{isHide}}"> <view wx:if="{{canIUse}}" > <view class='header'> <image src='/images/template/1.jpg'></image> </view> <view class='content'> <view>申请获取以下权限</view> <text>获得你的公开信息(昵称,头像等)</text> </view> <button class='bottom' type='primary' open-type="getUserInfo" lang="zh_CN" bindgetuserinfo="bindGetUserInfo"> 授权登录 </button> </view> <view wx:else>请升级微信版本</view> </view> <view class="userinfo" wx:if="{{haveUser}}"> <block > <image bindtap="bindViewTap" class="userinfo-avatar" src="{{userInfo.avatarUrl}}" mode="cover"></image> <text class="userinfo-nickname">{{userInfo.nickName}}</text> </block> </view>
在wxml中有很多标签都可以绑定事件(查看api文档)即可,我经常使用bindtap,catchsubmit,catchreset这些绑定属性实现绑定
开发一个页面间数据传递的实例
我们都知道http请求包括:post
get
head
patch
options
put
delete
trace
connect
常用的有post
get
,在微信小程序中对应实现方式是全局 url链接,这两个我都介绍一下。
一 URL传递。
我们可以使用navigator(类似html中的a标签)实现跳转,跳转时可携带参数。我们也可以通过绑定事件中使用wx.navigatorto等实现跳转,绑定请自行查看api文档。参数可以使用form实现,这里不牵扯太多,自行查看文档
URL传递源码附上:
login.wxml
<!--login.wxml--> <view class="container"> <!-- 使用navigator组件 --> <navigator url="pages/index/index?title=我是传递值">传递</navigator> </view>
index.js
// pages/index/index.js Page({ data: { title:'' }, onLoad: function (options) { console.log(options) //打印options,可以看到title的值可以获取到 this.setData({ title:options.title //为页面中title赋值 }) }, })
index.html
<view class='container'> {{title}} </view>
二 全局传递
全局保存的数据需要满足符合整个小程序都需要才可以,比如一个视频播放小程序,用户信息是需要的,而一个视频信息是不需要保存的,否则整个小程序全局所占缓存会快速升高,严重造成宕机。不多说了,源码附上。
app.js
//app.js App({ globalData: {} })
index.wxml
<!--index.wxml--> <!-- 点击触发go_Demo函数 --> <view class="container" bindtap='go_Demo'> 传递 </view>
index.js
//index.js //获取应用实例 const app = getApp() Page({ data: { title:'参数传递' }, go_Demo: function() { app.globalData.title = this.data.title wx.navigateTo({ url: '../demo/demo', }) } })
demo.js
// pages/demo/demo.js //获取应用实例 const app = getApp() Page({ data: { title:'' }, onLoad: function (options) { console.log(app.globalData.title) //打印options,可以看到title的值可以获取到 this.setData({ title: app.globalData.title //为页面中title赋值 }) }, })
更多微信小程序相关查看我的程序员提升专栏
,有需要请评论区留言。