1. 程式人生 > >微信小程式入門(登入頁面)

微信小程式入門(登入頁面)

1.首先前往開發者工具下載安裝開發工具:


2.安裝後微信掃碼,並填寫自己的AppID選擇自己的專案目錄後登入:

登陸後點擊工具上的編譯按鈕,可以在工具的左側模擬器介面看到這個小程式的表現,也可以點選預覽按鈕,通過微信的掃一掃在手機上體驗你的第一個小程式。


3.程式碼構成:可以看到在專案的根目錄有一個 app.json 和 project.config.json,在app.json中是對當前小程式的全域性配置,包括了小程式的所有頁面路徑、介面表現、網路超時時間、底部 tab 等,內容如下:

{
  "pages":[
    "pages/index/index",
    "pages/logs/logs"
  ],
  "window":{
    "backgroundTextStyle":"light",
    "navigationBarBackgroundColor": "#fff",
    "navigationBarTitleText": "WeChat",
    "navigationBarTextStyle":"black"
  }
}

project.config.json的作用:你在工具上做的任何配置都會寫入到這個檔案,當你重新安裝工具或者換電腦工作時,你只要載入同一個專案的程式碼包,開發者工具就自動會幫你恢復到當時你開發專案時的個性化配置,其中會包括編輯器的顏色、程式碼上傳時自動壓縮等等一系列選項。內容如下:

{
	"description": "專案配置檔案。",
	"packOptions": {
		"ignore": []
	},
	"setting": {
		"urlCheck": true,
		"es6": true,
		"postcss": true,
		"minified": true,
		"newFeature": true
	},
	"compileType": "miniprogram",
	"libVersion": "2.0.4",
	"appid": "wx9cff9d70e4813ce5",
	"projectname": "page",
	"isGameTourist": false,
	"condition": {
		"search": {
			"current": -1,
			"list": []
		},
		"conversation": {
			"current": -1,
			"list": []
		},
		"game": {
			"currentL": -1,
			"list": []
		},
		"miniprogram": {
			"current": -1,
			"list": []
		}
	}
}

4.app.js(互動邏輯)響應使用者的點選、獲取使用者的位置等等。在小程式裡邊,我們就通過編寫 JS 指令碼檔案來處理使用者的操作。本js中寫的是獲取微信的頭像,顯示資訊(hello word!)以及點選它們時所觸發的事件,程式碼如下:

//app.js
App({
  onLaunch: function () {
    // 展示本地儲存能力
    var logs = wx.getStorageSync('logs') || []
    logs.unshift(Date.now())
    wx.setStorageSync('logs', logs)

    // 登入
    wx.login({
      success: res => {
        // 傳送 res.code 到後臺換取 openId, sessionKey, unionId
      }
    })
    // 獲取使用者資訊
    wx.getSetting({
      success: res => {
        if (res.authSetting['scope.userInfo']) {
          // 已經授權,可以直接呼叫 getUserInfo 獲取頭像暱稱,不會彈框
          wx.getUserInfo({
            success: res => {
              // 可以將 res 傳送給後臺解碼出 unionId
              this.globalData.userInfo = res.userInfo

              // 由於 getUserInfo 是網路請求,可能會在 Page.onLoad 之後才返回
              // 所以此處加入 callback 以防止這種情況
              if (this.userInfoReadyCallback) {
                this.userInfoReadyCallback(res)
              }
            }
          })
        }
      }
    })
  },
  globalData: {
    userInfo: null
  }
})

下面在page中再建一個login目錄用來寫登入頁面,login.xml中寫頁面的模板,相當於html:

<!--pages/login/login.wxml-->
<view class='container'>
  <view class='header'>
    <text>學生評教系統</text>
  </view>
  <form bindsubmit="formSubmit">
    <view class='section'>
      <text>學號:</text>
      <input type='number' placeholder='請輸入學號' name="no" value='1635050238'/>
    </view>
    <view class='section'>
      <text>密碼:</text>
      <input password='true' placeholder='請輸入密碼' name="pwd" value='123456'/>
    </view>
    <view class='button'>
      <button type='primary' form-type='submit'>登入</button>
    </view>
  </form>
    <view class='fpwd' bindtap='findpwd'>
      <text>忘記密碼</text>
    </view>
</view>

在login.wxss中寫模板的樣式,相當於css:

/* pages/login/login.wxss */
form{
  width: 310px;
  height: 240px;
  line-height: 40px;
  /* border: 1px solid red;  */
}
input{
  border: 1px solid #ccc;
  width: 310px;
  height: 40px;
}
.button{
  margin-top: 20px;
}
.header text{
  font-size: 25px;
  color: #666;
}
form text{
  font-size: 20px;
  color: #666;
}
.fpwd{
  margin-top: 200px;
}
.fpwd text{
  color: #ccc;
  font-size: 18px;
}

login.js中寫當點選登陸時所觸發的事件:

// pages/login/login.js
Page({

  /**
   * 頁面的初始資料
   */
  data: {
  
  },
  formSubmit: function (e) {
    // console.log(e.detail.value);
    wx.request({
      // url: 'https://www.lishuming.top/pj/index.php/student/api/login', //僅為示例,並非真實的介面地址
      url: app.globalData.url.login,
      data: {
        username: e.detail.value.no,
        password: e.detail.value.pwd
      },
      header: {
        'content-type': 'application/json' // 預設值
      },
      success: function (res) {
        console.log(res.data);
        if (res.statusCode == 200) {
          //訪問正常
          if (res.data.error == true) {
            wx.showToast({
              title: res.data.msg,
              icon: 'none',
              duration: 2000,
            })
          } else {
            //快取
            wx.setStorage({
              key: "student",
              data: res.data.student
            });
            wx.showToast({
              title: "登陸成功",
              icon: 'success',
              duration: 20000,
              success: function () {
                setTimeout(function () {
                  wx.switchTab({
                    url: '../teachers/teachers',
                  })
                }, 2000)
              }
            })
          }
        }

      }
    })
  }
})

頁面顯示: