在微信小程序頁面間傳遞數(shù)據(jù)

在開發(fā)微信小程序過程之中,遇到這么一些需要在微信小程序頁面之間進行數(shù)據(jù)的傳遞的情況讼稚,也遇到了開發(fā)過程微信小程序限制情況椭赋,特此做個總結(jié)。

  • 全局變量之中傳遞參數(shù)數(shù)據(jù)
    • 在微信小程序的開發(fā)過程之中雇庙,需要從A頁面跳轉(zhuǎn)到B頁面,并且把A頁面的數(shù)據(jù)傳遞到B頁面使用灶伊〗埃可以使用全局變量使用的方法,微信小程序官方提供app.js全局變量定義文件谁帕,里面可以定義需要在全局需要使用的變量與及變量值峡继,例如用戶登錄之后,需要在所有頁面中使用用戶登錄狀態(tài)等匈挖。
    • 微信小程序初始化時碾牌,首先會加載app.json全局樣式配置文件和全局變量文件,例如下面的globalData變量儡循。
    • 在app.js定義全局變量后舶吗,可以在各頁面間直接加載全局變量,小程序提供了getApp()方法择膝,可以直接獲取到App({...})這個全局實例對象誓琼。
App({

  /**
   * 當小程序初始化完成時,會觸發(fā) onLaunch(全局只觸發(fā)一次)
   */
  onLaunch: function () {
    
  },

  /**
   * 當小程序啟動,或從后臺進入前臺顯示腹侣,會觸發(fā) onShow
   */
  onShow: function (options) {
    
  },

  /**
   * 當小程序從前臺進入后臺叔收,會觸發(fā) onHide
   */
  onHide: function () {
    
  },

  /**
   * 當小程序發(fā)生腳本錯誤,或者 api 調(diào)用失敗時傲隶,會觸發(fā) onError 并帶上錯誤信息
   */
  onError: function (msg) {
    
  }饺律,
  //全局變量
  globalData:{
      userInfo:null
  }
   
})
//page/index/index
var app=getApp();//取得全局App({..})實例
var userInfo=app.globalData.userInfo;//取得全局變量需要的值
  • 使用本地緩存的方法保存全局變量,本地緩存是有存儲限制的,所以建議手動刪除不再需要的緩存數(shù)據(jù)跺株。
    • 假如在A頁面保存需要的信息,如下圖就可以直接保存鍵名為cargo的數(shù)據(jù)复濒。
var cargo={
    id:'12345',
    count:2,
    name:'xx書籍',
    price:85,
    picUrl:'http://image/kiwis.com/gfdscvbwerdcdgqd.jpg'
};
wx.setStorage({
  key:"cargo",
  data:cargo
})
  • 在B頁面直接可以使用小程序的wx.getStorage并傳入要獲取到的鍵值名就可以獲取本地緩存的數(shù)據(jù)。
wx.getStorage({
  key: 'cargo',
  success: function(res) {
      console.log(res.data)
  } 
})
  • 通過在跳轉(zhuǎn)乒省、重定向等轉(zhuǎn)變頁面時候巧颈,可以直接通過url來傳送數(shù)據(jù)。
    • 在A頁面?zhèn)鬟f數(shù)據(jù)到B頁面中使用的時候可以直接使用以下數(shù)據(jù)袖扛。
    //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不能跳轉(zhuǎn)到tabar定義的頁面砸泛,查看了微信小程序提供了wx.switchTab進行跳轉(zhuǎn),但是switchTab不可以傳遞url參數(shù)攻锰,后面提供了wx.reLaunch函數(shù)晾嘶。
    • 往組件模板之中傳遞數(shù)據(jù),可以直接在模板的data-*中傳遞數(shù)據(jù)娶吞。
    <template is="模板名" data="數(shù)據(jù)對象"/>
    
  • 通過頁面棧獲取到上一頁面對數(shù)據(jù)進行修改
    • 假設從A頁面跳轉(zhuǎn)到B頁面,而B頁面需要對A頁面的數(shù)據(jù)進行修改處理械姻。
    //pageA
    page({
       data:{
          user:kiwis
       }
    })
    //pageB
    page({
        updateData:function(){
          var pages=getCurrentPages();
          var prevPage=pages[pages.length-2];
          prevPage.setData({
               user:'LaternKiwis'
           })
        }
    })
    
  • 對于全局變量的妒蛇,也可以直接通過第三方服務器用數(shù)據(jù)庫進行保存,是要使用的時候直接從數(shù)據(jù)庫里面直接讀取全局變量楷拳。
    • 使用wx.request提交與讀取數(shù)據(jù)
    //提交數(shù)據(jù)給第三方服務器進行插入緩存數(shù)據(jù)庫處理
     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)
        }
    })
    //從緩存數(shù)據(jù)庫讀取數(shù)據(jù)
    wx.request({
        url: 'test.php', //僅為示例,并非真實的接口地址
        data: {
           username:'kiwis'
        },
        method:'GET',
        header: {
          'content-type': 'application/json'
        },
       success: function(res) {
          console.log(res.data)
        }
    })
    
  • 在使用url進行參數(shù)傳遞時候欢揖,傳遞數(shù)據(jù)有字節(jié)限制陶耍;詳情可以查閱微信小程序的文檔;在使用url傳參數(shù)數(shù)據(jù)時候她混,如果傳送的參數(shù)值是一個json數(shù)據(jù)烈钞,要使用JSON.stringify對json對象轉(zhuǎn)換成字符串的形式;在開發(fā)小程序過程中坤按,使用Nodejs獲取傳遞的參數(shù)時毯欣,沒有經(jīng)過字符串序列化,在后臺獲取不到參數(shù)值臭脓,顯示為null酗钞。所以需要JSON.stringify,然后在后臺邏輯之中使用JSON.parse序列化成對象使用。
  • 小程序通過wx.navaigaTo跳轉(zhuǎn)到具體的頁面,并傳遞相關(guān)聯(lián)的參數(shù)數(shù)據(jù)過去案例如下砚作,class為item的view綁定了tap事件窘奏,傳遞數(shù)據(jù)通過data-* 來定義(*是自定義的儲存數(shù)據(jù)變量值,其中的item是真實數(shù)據(jù))例如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>
    
  • 在wx的js文件中葫录,通過play事件通過下面的方式傳遞數(shù)據(jù),通過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"]
      })
     }
    
  • 在要接收上一頁面?zhèn)鬟f過來的數(shù)據(jù)的頁面通過onLoad事件的options參數(shù)里面包含了上一頁面所有傳遞過來的參數(shù)數(shù)據(jù)着裹,可以通過下面的方式進行獲取。
      onLoad:function(options){
      var that=this
      that.setData({
        imgUrl:options.imgUrl,
        title:options.title,
        videoSrc:options.videoSrc,
        group_id:options["group_id"]
      })
    },
    
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末压昼,一起剝皮案震驚了整個濱河市求冷,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌窍霞,老刑警劉巖匠题,帶你破解...
    沈念sama閱讀 206,839評論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異但金,居然都是意外死亡韭山,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,543評論 2 382
  • 文/潘曉璐 我一進店門冷溃,熙熙樓的掌柜王于貴愁眉苦臉地迎上來钱磅,“玉大人,你說我怎么就攤上這事似枕「堑” “怎么了?”我有些...
    開封第一講書人閱讀 153,116評論 0 344
  • 文/不壞的土叔 我叫張陵凿歼,是天一觀的道長褪迟。 經(jīng)常有香客問我,道長答憔,這世上最難降的妖魔是什么味赃? 我笑而不...
    開封第一講書人閱讀 55,371評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮虐拓,結(jié)果婚禮上心俗,老公的妹妹穿的比我還像新娘。我一直安慰自己蓉驹,他們只是感情好城榛,可當我...
    茶點故事閱讀 64,384評論 5 374
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著戒幔,像睡著了一般吠谢。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上诗茎,一...
    開封第一講書人閱讀 49,111評論 1 285
  • 那天工坊,我揣著相機與錄音献汗,去河邊找鬼。 笑死王污,一個胖子當著我的面吹牛罢吃,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播昭齐,決...
    沈念sama閱讀 38,416評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼尿招,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了阱驾?” 一聲冷哼從身側(cè)響起就谜,我...
    開封第一講書人閱讀 37,053評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎里覆,沒想到半個月后丧荐,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,558評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡喧枷,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,007評論 2 325
  • 正文 我和宋清朗相戀三年虹统,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片隧甚。...
    茶點故事閱讀 38,117評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡车荔,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出戚扳,到底是詐尸還是另有隱情忧便,我是刑警寧澤,帶...
    沈念sama閱讀 33,756評論 4 324
  • 正文 年R本政府宣布帽借,位于F島的核電站茬腿,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏宜雀。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,324評論 3 307
  • 文/蒙蒙 一握础、第九天 我趴在偏房一處隱蔽的房頂上張望辐董。 院中可真熱鬧,春花似錦禀综、人聲如沸简烘。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,315評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽孤澎。三九已至,卻和暖如春欠窒,著一層夾襖步出監(jiān)牢的瞬間覆旭,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,539評論 1 262
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留型将,地道東北人寂祥。 一個月前我還...
    沈念sama閱讀 45,578評論 2 355
  • 正文 我出身青樓,卻偏偏與公主長得像七兜,于是被迫代替她去往敵國和親丸凭。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 42,877評論 2 345

推薦閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理腕铸,服務發(fā)現(xiàn)惜犀,斷路器,智...
    卡卡羅2017閱讀 134,600評論 18 139
  • 給提問的開發(fā)者的建議:提問之前先查詢 文檔狠裹、通過社區(qū)右上角搜索搜索已經(jīng)存在的問題虽界。 寫一個簡明扼要的標題,并且...
    極樂叔閱讀 13,388評論 0 3
  • 微信小程序在無論在功能酪耳、文檔及相關(guān)支持方面浓恳,都是優(yōu)于前面幾種微信賬號類型,它提供了很多原生程序才有的接口碗暗,使得我們...
    未央大佬閱讀 2,290評論 0 12
  • 為了方便大家了解并入門微信小程序颈将,我將一些可能會需要的知識,列在這里言疗,讓大家方便的從零開始學習晴圾; 首先感謝幾位給予...
    極樂叔閱讀 3,425評論 2 16
  • 良心是個標尺,是你身體里的三角板噪奄,沒做壞事死姚,它就靜靜不動;一旦做了壞事勤篮,它便轉(zhuǎn)動起來都毒,每個角都將你刺痛;如果一直做...
    七七爸爸愛武林閱讀 352評論 2 1