微信小程序傳值常用的4種方式
一、使用全局變量傳遞數(shù)據(jù)
提示:利用 app.js 中的 globalData 將數(shù)據(jù)存儲為全局變量,在需要使用的頁面通過 getApp().globalData 獲取
// 步驟一:在全局app.js文件中定義數(shù)據(jù) App({ globalData: { userName: '全局變量傳值', } }) // 步驟二:獲取應(yīng)用實例,不然無法調(diào)用全局變量 const app = getApp() // 步驟三:調(diào)用全局變量 Page({ data: { }, onLoad: function (options) { console.log(app.globalData.userName); }, })
二、本地存儲傳遞數(shù)據(jù)
提示:利用微信小程序提供的本地存儲 wx.setStorageSync 與 wx.getStorageSync 進行傳值。
設(shè)值:wx.setStorageSync('title', title)
取值:var title=wx.getStorageSync('title')
三、使用路由傳遞數(shù)據(jù)
傳遞:
// 跳轉(zhuǎn)的同時攜帶數(shù)據(jù)拼接在URL后面,跳轉(zhuǎn)到的頁面利用onLoad()方法的參數(shù)options即可獲取到傳遞的參數(shù) wx.navigateTo({ url: `跳轉(zhuǎn)路由?data=${data}`, })
接收:
onLoad(options){ console.log(options) }
注意:如若因為傳遞的是對象類型的數(shù)據(jù),到另一個頁面獲取時會發(fā)現(xiàn)是"[object,object]",解決方法是利用JSON.stringify()和JSON.parse()
傳遞:
const data = JSON.stringify(this.data); wx.redirectTo({ url: `跳轉(zhuǎn)url?data=${data}` })
接收:
onLoad(options){ const data = JSON.parse(JSON.stringify(options.data)); }
四、父子組件之間傳值
- 父向子傳值使用的是屬性綁定,子組件中 的
properties
對象 進行接收父組件傳遞過來的值 - 子向父傳值使用的是自定義事件,父組件通過自定義事件中的 事件對象e 來接收子組件傳遞過來的值
父向子傳值
- 創(chuàng)建一個
components
文件夾 用于存放子組件。在components
文件夾下創(chuàng)建我們的子組件child
, 創(chuàng)建成任何名字都可以,這里創(chuàng)建成child
。
- 創(chuàng)建好以后就是引入,把
子組件 child
引入到父組件 index
中去。 這里說明一下,此案例創(chuàng)建了兩個頁面,一個是pages
節(jié)點下的index
路由頁面,一個是components
節(jié)點下的child
組件 。
//在父組件的 json 文件中的 usingComponents節(jié)點下 引入 { "usingComponents": { "child":"../../components/child/child" } }
- 渲染子組件內(nèi)容到父組件上
給組件起的自定義名字是 child
那么 我們渲染的時候就 在 index 父組件
里寫上一組 <child><child>
標簽即可
- 父組件
<child name="{{ name }}" age="{{ age }}" ></child> export default{ data(){ return{ name:"老五", age:50 } } }
子組件
<view> 這是父組件傳遞過來的值 name: {{ name }}-----age {{age}} </view> // 接受父組件傳遞過來的值 properties: { name:{ type:String, value:'我是默認值:哈哈' }, age:{ type:Number, value:'我是默認值: 100' } },
子向父傳值
- 子組件
WXML
<!-- 點擊按鈕向父組件傳值 --> <button bindtap="send">點擊按鈕向父組件傳值</button>
JS
? ? data: { msg:'我是子組件的值' }, methods: { send(){ this.triggerEvent('send',this.data.msg) } },
- 父組件
父組件中定義一下這個自定義事件bindsend="send"
WXML
<child name="{{ name }}" age="{{ age }}" bindsend="send"></child>
JS
// 父組件接受子組件傳遞過來的值 send(e){ console.log(e.detail); }
附:解決微信小程序跳轉(zhuǎn)url傳參對象數(shù)據(jù)過長報錯的問題
最近開發(fā)微信小程序 碰到的一個小問題,那就是 跳轉(zhuǎn)url的時候,傳對象數(shù)據(jù)過長的問題,小程序在傳對象的時候要先用JSON.stringify()轉(zhuǎn)換一下,接受頁面在用JSON.parse()再轉(zhuǎn)換回來。
但是這樣有一個問題,數(shù)據(jù)過長會報錯,或者是只拿到了一部分
這個時候我們就需要用到兩個 方法
encodeURIComponent(obj) 跳轉(zhuǎn)url時的轉(zhuǎn)換方法 decodeURIComponent(options.obj) 頁面接收參數(shù)頁面的轉(zhuǎn)換方法
這樣就OK了?。。?!
總結(jié)
到此這篇關(guān)于微信小程序傳值常用的4種方式的文章就介紹到這了,更多相關(guān)微信小程序傳值方式內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
原生js 封裝get ,post, delete 請求的實例
下面小編就為大家?guī)硪黄鷍s 封裝get ,post, delete 請求的實例。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-08-08javascript 動態(tài)樣式添加的簡單實現(xiàn)
下面小編就為大家?guī)硪黄猨avascript 動態(tài)樣式添加的簡單實現(xiàn)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2016-10-10用js實現(xiàn)判斷當前網(wǎng)址的來路如果不是指定的來路就跳轉(zhuǎn)到指定頁面
用js實現(xiàn)判斷當前網(wǎng)址的來路如果不是指定的來路就跳轉(zhuǎn)到指定頁面,需要的朋友可以參考下。2011-05-05JavaScript flash復(fù)制庫類 Zero Clipboard
開發(fā)中經(jīng)常會用到復(fù)制的功能,在 IE 下實現(xiàn)比較簡單。但要想做到跨瀏覽器比較困難了。2011-01-01JS實現(xiàn)Date日期格式的本地化的方法小結(jié)
為了更好的更新多語言日期的顯示,所以希望實現(xiàn)日期的本地化格式顯示要求,常規(guī)的特殊字符型格式化無法滿足顯示要求,這里整理了幾種我思考實現(xiàn)的本地化實現(xiàn)功能2024-06-06JScript 腳本實現(xiàn)文件下載 一般用于下載木馬
腳本實現(xiàn)文件下載,這個是jscript的,腳本之家以前曾發(fā)布vbscript版本的,原理一樣的。2009-10-10JavaScript實現(xiàn)元素滾動條到達一定位置循環(huán)追加內(nèi)容
下面小編就為大家分享一篇JavaScript實現(xiàn)元素滾動條到達一定位置循環(huán)追加內(nèi)容,具有很好的參考價值,希望對大家有所幫助2017-12-12