微信小程序三个实例带你入门

微信小程序三个实例带你入门

前置说明

  1. 新建微信小程序项目时,默认使用云开发服务(不需要云开发可以关闭)

  1. 项目目录及文件含义查看微信官方文档

  2. 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赋值
 })
 },
})

更多微信小程序相关查看我的程序员提升专栏,有需要请评论区留言。

全部评论

相关推荐

投递小天才等公司10个岗位
点赞 评论 收藏
分享
1 2 评论
分享
牛客网
牛客企业服务