在開發微信小程序過程之中,遇到這麼一些須要在微信小程序頁面之間進行數據的傳遞的狀況,也遇到了開發過程微信小程序限制狀況,特此作個總結。php
app.js
全局變量定義文件,裏面能夠定義須要在全局須要使用的變量與及變量值,例如用戶登陸以後,須要在全部頁面中使用用戶登陸狀態等。globalData
變量。app.js
定義全局變量後,能夠在各頁面間直接加載全局變量,小程序提供了getApp()
方法,能夠直接獲取到App({...})
這個全局實例對象。App({
/**
* 當小程序初始化完成時,會觸發 onLaunch(全局只觸發一次)
*/
onLaunch: function () {
},
/**
* 當小程序啓動,或從後臺進入前臺顯示,會觸發 onShow
*/
onShow: function (options) {
},
/**
* 當小程序從前臺進入後臺,會觸發 onHide
*/
onHide: function () {
},
/**
* 當小程序發生腳本錯誤,或者 api 調用失敗時,會觸發 onError 並帶上錯誤信息
*/
onError: function (msg) {
},
//全局變量
globalData:{
userInfo:null
}
})
//page/index/index
var app=getApp();//取得全局App({..})實例
var userInfo=app.globalData.userInfo;//取得全局變量須要的值
複製代碼
var cargo={
id:'12345',
count:2,
name:'xx書籍',
price:85,
picUrl:'http://image/kiwis.com/gfdscvbwerdcdgqd.jpg'
};
wx.setStorage({
key:"cargo",
data:cargo
})
複製代碼
wx.getStorage
並傳入要獲取到的鍵值名就能夠獲取本地緩存的數據。wx.getStorage({
key: 'cargo',
success: function(res) {
console.log(res.data)
}
})
複製代碼
//page A
wx.navigateTo({
url: 'test?id=1'
})
//or page A
wx.redirectTo({
url: 'test?id=1'
})
// or page A
wx.reLaunch({
url: 'test?id=1'
})
//page B
Page({
onLoad: function(option){
console.log(option.query)
}
})
複製代碼
wx.navigateTo
和wx.redirectTo
不能跳轉到tabar定義的頁面,查看了微信小程序提供了wx.switchTab
進行跳轉,可是switchTab
不能夠傳遞url參數,後面提供了wx.reLaunch
函數。data-*
中傳遞數據。<template is="模板名" data="數據對象"/>
複製代碼
//pageA
page({
data:{
user:kiwis
}
})
//pageB
page({
updateData:function(){
var pages=getCurrentPages();
var prevPage=pages[pages.length-2];
prevPage.setData({
user:'LaternKiwis'
})
}
})
複製代碼
wx.request
提交與讀取數據//提交數據給第三方服務器進行插入緩存數據庫處理
wx.request({
url: 'test.php', //僅爲示例,並不是真實的接口地址
data: {
username:'kiwis',
gender:1,
picUrl:'http://image/kiwis.com/gfdscvbwerdcdgqd.jpg'
},
method:'POST',
header: {
'content-type': 'application/json'
},
success: function(res) {
console.log(res.data)
}
})
//從緩存數據庫讀取數據
wx.request({
url: 'test.php', //僅爲示例,並不是真實的接口地址
data: {
username:'kiwis'
},
method:'GET',
header: {
'content-type': 'application/json'
},
success: function(res) {
console.log(res.data)
}
})
複製代碼
JSON.stringify
對json對象轉換成字符串的形式;在開發小程序過程當中,使用Nodejs獲取傳遞的參數時,沒有通過字符串序列化,在後臺獲取不到參數值,顯示爲null。因此須要JSON.stringify
,而後在後臺邏輯之中使用JSON.parse
序列化成對象使用。wx.navaigaTo
跳轉到具體的頁面,並傳遞相關聯的參數數據過去案例以下,class爲item的view綁定了tap事件
,傳遞數據經過data-*
來定義(*是自定義的儲存數據變量值,其中的item是真實數據)例如wxml頁面以下所示:<view class="container">
<view class="item" wx:for="{{items}}" data-video="{{item}}" bindtap="play">
<image src="{{item.image_url}}" class="newsPic"></image>
<view class="source">
<text>{{item.source}}</text>
<text class="count">評論 {{item.comments_count}}</text>
</view>
<view class="icon" >
<text>{{item.title}}</text>
<image src="../../images/{{path}}" class="play"></image>
</view>
</view>
</view>
複製代碼
event.currentTarget.dataset
獲取咱們自定義的video變量:play:function(event){
var video = event.currentTarget.dataset.video;
console.log(video)
// this.setData({
// path:'play.png'
// })
wx.navigateTo({
url: '../logs/logs?imgUrl=' + video.image_url + '&source_url=' + video["source_url"] + "&title=" + video.title + "&group_id=" + video["group_id"]
})
}
複製代碼
onLoad
事件的options
參數裏面包含了上一頁面全部傳遞過來的參數數據,能夠經過下面的方式進行獲取。onLoad:function(options){
var that=this
that.setData({
imgUrl:options.imgUrl,
title:options.title,
videoSrc:options.videoSrc,
group_id:options["group_id"]
})
},
複製代碼