动态

详情 返回 返回

微信小程序開發系列 (四) :微信小程序的頁面跳轉路由設計 - 动态 详情

筆者由於工作需要,曾經參加過一個微信小程序同 SAP 系統集成的項目,因此從零開始學習了微信小程序的開發知識。這裏通過系列文章把自己所學分享出來,希望對相關學習者有所幫助。

本教程前面三篇文章:

  • 微信小程序開發系列 (一) :開發環境搭建和微信小程序的視圖設計與開發
  • 微信小程序開發系列 (二) :微信小程序的單步調試和控制器實現步驟概述
  • 微信小程序開發系列 (三) :微信小程序如何響應用户點擊事件和微信平台 API 的使用方法介紹

通過本系列前面三篇文章的介紹,大家對微信小程序的視圖和控制器,微信調試器的用法,以及如何消費微信平台提供的 Public API,已經有了一個最基本的認識了。在這個基礎上,本文讓我們進一步學習微信小程序的頁面跳轉路由設計。

微信小程序的頁面跳轉路由設計

這個系列教程的前六篇文章我們都在單個的視圖上操作。現在讓我們創建第二個視圖,然後實現從第一個視圖到第二個視圖的跳轉。
首先開發第二個視圖:

<view class="container log-list">
<block wx:for="{{logs}}" wx:for-item="log">
<text class="log-item">{{index + 1}}. {{log}}</text>
</block>
</view>

做過 Angular 開發的朋友們對上面的視圖設計一定不會陌生。這個視圖的數據源由模型 logs 提供,是一個列表結果,列表每個元素的數據源是模型 logs 裏的一條記錄,用 log 代表。

為了讓 log 看起來顯示更整齊,在 log 內容之前,顯示每條 log 的索引。因為 log 的索引從 0 開始,所以用 {{index + 1}} 在索引前加一,這樣顯示的索引更符合普通人的閲讀習慣。

這個視圖的控制器:

//logs.js
const util = require('../../utils/util.js')
Page({
   data: {
        logs: []
   },
   onLoad: function () {
       this.setData({
            logs: (wx.getStorageSync('logs') || []).map(log => {
                  return util.formatTime(new Date(log))
            })
       })
   }
})

控制器 logs.js 的實現:

在控制器裏調用 Page 構造函數,給當前控制器指定名為 logs 的數據模型。
這個數據模型的值填充,通過微信框架提供的 API wx.getStorageSync 來獲取。

wx.getStorageSync 的含義在微信小程序官網上有定義:從本地緩存中同步獲取指定 key 對應的內容。

第二個視圖的 UI 和控制器都開發完畢,剩下的事情就是在第一個視圖裏定義一個觸發點,讓它能觸發到第二個視圖的跳轉。
我在第一個視圖上通過屬性 bindtap 綁定了一個點擊函數 bindViewTap:

bindViewTap 在第一個控制器 index.js 裏的實現:

bindViewTap: function() {
   wx.navigateTo({
         url: '../logs/logs'
    })
},

跳轉還是通過微信小程序提供的 API wx.navigateTo:

保留當前頁面,跳轉到應用內的某個頁面,使用 wx.navigateBack 可以返回到原頁面。

學習了微信小程序頁面路由跳轉之後,我們來進行一個實際的需求開發。

在微信小程序裏自動獲得當前手機所在的經緯度並轉換成地址

效果:我在手機上打開微信小程序,自動顯示出我當前所在的地理位置:

具體步驟:

  1. 使用微信 jssdk 提供的 getLocation API 拿到經緯度;
  2. 調用高德地圖的 api 使用經緯度去換取地址的文字描述。

wx.ready(() => {
wx.getLocation({
    type: "gcj02",
    success: function(res) {
        var location = "&location=" + res.longitude + "," + res.latitude;
        ReservationService.getGeocode(location).then(response => {
        if (response.data.status === "1" && response.data.info === "OK" ) {
            self.country = response.data.regeocode.addressComponent.country;
            self.city = response.data.regeocode.addressComponent.city;
            var express = "/" + self.country + "|" +
response.data.regeocode.addressComponent.province + "|" + self.city + "|" + response.data.regeocode.addressComponent.district + "|" +
response.data.regeocode.addressComponent.township + "/g";
            self.address = response.data.regeocode.formatted_address.replace(eval(express), ""
        );
        } else {
            // get location error, plz input address
            alert("無法獲取地址信息,請稍後再試");
        }
    });
}
});

ReservationService.getGeocode 的實現:

getGeocode(location) {
const key = '此處填入您高德地圖app的key';
return axios.post('https://restapi.amap.com/v3/geocode/regeo?key=' + key + location);
}

看下面一個使用高德地圖 API 將經緯度轉換成文字描述的地址的例子,使用 postman 發送請求:

API 響應:

{
"status": "1",
"regeocode": {
"addressComponent": {
"city": [],
"province": "北京市",
"adcode": "110101",
"district": "東城區",
"towncode": "110101001000",
"streetNumber": {
"number": "44號",
"location": "116.39795,39.9097239",
"direction": "東北",
"distance": "117.874",
"street": "廣場東側路"
},
"country": "中國",
"township": "東華門街道",
"businessAreas": [
{
"location": "116.3998109423077,39.90717459615385",
"name": "天安門",
"id": "110101"
},
{
"location": "116.39981058278138,39.92383706953642",
"name": "景山",
"id": "110101"
},
{
"location": "116.4118112683418,39.91461494422115",
"name": "王府井",
"id": "110101"
}
],
"building": {
"name": "天安門",
"type": "風景名勝;風景名勝相關;旅遊景點"
},
"neighborhood": {
"name": [],
"type": []
},
"citycode": "010"
},
"formatted_address": "北京市東城區東華門街道天安門"
},
"info": "OK",
"infocode": "10000"
}


如何使用微信開發者工具調試在微信端訪問的網頁

假設我用 vue 開發了一個 web 應用,需要在手機微信裏訪問並調試, 可以按照本文介紹的步驟,使用微信開發者工具來調試。

假設我的 web 應用的訪問入口是如下公眾號菜單的"預約"按鈕:

那麼為了能夠在微信開發者工具裏調試,需要首先進入該公眾號的後台,在 web 開發者工具裏,將開發者本人的微信號添加進去:

點擊"綁定開發者賬號":

輸入待綁定的微信賬號:

點擊綁定,該微信號會收到一條消息,詢問是否綁定:

點擊同意操作完成綁定。

接下來, 把要調試的 web 應用的 url 放到微信開發者工具地址欄裏,回車之後,微信開發者工具就會彈出一個詢問窗口,點擊 Allow 之後,就可以在微信開發者工具提供的類似 Chrome 開發者工具調試器一樣的界面裏進行單步調試了。

這個粘貼到地址欄的 url 很有講究。

https://open.weixin.qq.com/co...

其中 appid= 後面的值,是從微信公眾號控制枱裏拷貝出來的 appid

redirect_uri, 即為我們開發的 web 應用,部署到服務器之後生成的 url,需要經過 url encode 處理:

https://www.xxx.com/smart
這個 url 準備好之後,將其粘貼到微信開發者工具地址欄裏,回車,即可看到一個對話窗口,要求獲得我們公開信息的許可:

點擊 Allow 之後,就可以像使用 Chrome 開發者工具的調試器一樣,在微信開發者工具裏進行單步調試了:

總結

本文首先介紹了微信小程序多頁面內的路由跳轉設計,接着通過獲得手機當前經緯度並轉換成地址的需求實現,進一步深入瞭解了微信小程序如何消費微信平台提供 Public API 的方法。

本教程前面三篇文章:

  • 微信小程序開發系列 (一) :開發環境搭建和微信小程序的視圖設計與開發
  • 微信小程序開發系列 (二) :微信小程序的單步調試和控制器實現步驟概述
  • 微信小程序開發系列 (三) :微信小程序如何響應用户點擊事件和微信平台 API 的使用方法介紹
user avatar steven_code 头像 xuxueli 头像 toopoo 头像 dalideshoushudao 头像 songxianling1992 头像 evenboy 头像 piaoyidebanma 头像 wangzc996 头像 fjc0k 头像 apocelipes 头像 jidongdehai_co4lxh 头像 bin_60080bc5146e1 头像
点赞 13 用户, 点赞了这篇动态!
点赞

Add a new 评论

Some HTML is okay.