国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 熱點(diǎn) > 微信 > 正文

微信小程序在其他頁面監(jiān)聽globalData中值的變化

2024-07-22 01:18:00
字體:
供稿:網(wǎng)友

前言

這幾天去面試,多次碰到同一個(gè)知識(shí)點(diǎn)。而且有一次面試挺有趣的,是關(guān)于小程序的。共有3個(gè)問題。

1、小程序中Page.watch()方法是做什么用的?

2、小程序中如何在其他頁面中監(jiān)聽到globalData中值的變化?

3、如果在app.js執(zhí)行登錄部分的代碼,由于時(shí)序問題,如何處理其他頁面請(qǐng)求時(shí)未獲取到身份識(shí)別標(biāo)記的情況。(session,userid等)。(大意是:怎么能夠保證其他頁面請(qǐng)求是在登錄之后?)

知識(shí)點(diǎn)

有經(jīng)驗(yàn)的同學(xué)可能一下子就看出來了,這其實(shí)說的是同一個(gè)東西,那就是Object.defineproperty()這個(gè)方法。

下面我來嘗試回答一下:

第一題:小程序中并沒有Page.watch()方法,但其實(shí)這里面試官的要問的東西就是第二題的題目,也就是屬性監(jiān)聽器。

第二題:由于要監(jiān)聽到globalData中的值的變化,所以一般要在globalData改變時(shí)回調(diào)一個(gè)方法。例如我們監(jiān)聽一個(gè)name屬性,大致代碼如下:

// app.js中//app.jsApp({ onLaunch: function () { let that = this // 在這里用定時(shí)器模擬網(wǎng)絡(luò)請(qǐng)求的過程 setTimeout(function(){  that.globalData.name = 'pxh' },3000)  }, // 這里這么寫,是要在其他界面監(jiān)聽,而不是在app.js中監(jiān)聽,而且這個(gè)監(jiān)聽方法,需要一個(gè)回調(diào)方法。 watch:function(method){ var obj = this.globalData; Object.defineProperty(obj,"name", {  configurable: true,  enumerable: true,  set: function (value) {  this._name = value;  console.log('是否會(huì)被執(zhí)行2')  method(value);  },  get:function(){  // 可以在這里打印一些東西,然后在其他界面調(diào)用getApp().globalData.name的時(shí)候,這里就會(huì)執(zhí)行。  return this._name  } }) }, globalData: { userInfo: null, _name:'msr' }})// 然后在index.js中的聲明周期中實(shí)現(xiàn)onLoad: function (options) { let that = this; getApp().watch(that.watchBack) }, watchBack: function (name){ console.log(22222); console.log('this.name==' + name) }

看看執(zhí)行效果(可以看到,我們?cè)谄渌缑嫱昝缹?shí)現(xiàn)了監(jiān)聽到globalData的變化)

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 天峨县| 寿阳县| 健康| 清新县| 分宜县| 遂昌县| 甘肃省| 九寨沟县| 和静县| 赤峰市| 东阿县| 绵竹市| 龙州县| 安吉县| 通江县| 越西县| 谷城县| 郯城县| 富锦市| 遵义市| 微博| 阳信县| 上蔡县| 个旧市| 应用必备| 镇赉县| 广饶县| 荥经县| 稻城县| 镇远县| 九寨沟县| 阆中市| 遂平县| 密云县| 久治县| 济源市| 大宁县| 资溪县| 栾川县| 绥棱县| 司法|