中文字幕第五页-中文字幕第页-中文字幕韩国-中文字幕最新-国产尤物二区三区在线观看-国产尤物福利视频一区二区

怎么在微信小程序中監聽用戶登錄事件

本篇文章給大家分享的是有關怎么在微信小程序中監聽用戶登錄事件,小編覺得挺實用的,因此分享給大家學習,希望大家閱讀完這篇文章后可以有所收獲,話不多說,跟著小編一起來看看吧。

員工經過長期磨合與沉淀,具備了協作精神,得以通過團隊的力量開發出優質的產品。創新互聯堅持“專注、創新、易用”的產品理念,因為“專注所以專業、創新互聯網站所以易用所以簡單”。公司專注于為企業提供成都網站設計、成都做網站、微信公眾號開發、電商網站開發,小程序開發,軟件按需制作等一站式互聯網企業服務。

需求如下:

  • 小程序共三個tab頁,所有用戶都可以瀏覽首頁內容,了解我們可以提供的優質服務;

  • 進入其他兩個頁面之后,如果用戶沒有登錄,那就顯示登錄按鈕,如果登錄了,則顯示服務內容;

  • 用戶在一個頁面登陸之后,全局生效。

就這么個看起來很簡單的需求,也經過了如下迭代:

  • 將登錄狀態和憑據存儲在 App.globalData.authorize 中,每個需要授權的頁面 onload 生命周期檢查 App.globalData.authorize.authorized ,為 true 時渲染服務內容,為 false 則顯示登錄按鈕;

  • 但如果打開了需要授權的頁面 A 但是沒有登錄,再打開頁面 B 登錄,這時候回到 A 頁面,登錄按鈕赫然在眼,這是因為 A 頁面的 onload 回調函數只執行了一次;

  • 為了能在 A 頁面及時共享 B 頁面登錄后的狀態,在 A 頁面的 onshow 生命周期里再獲取了一次登錄狀態,但這樣一來,打開 A 頁面的時候,會出現短暫的白屏,用戶甚至有可能看到按鈕變成服務內容的整個過程。

翻遍小程序 API 文檔 ,也沒有發現用于監聽登錄的生命周期,就算有也用不了,因為我們有著自己的賬號體系,服務端認證完畢才算真正的登錄成功。

所以我決定自己包裝原有的 Page 函數,添加一個 onauth 生命周期——

首先是自定義登錄事件的觸發與監聽,官方的EventChannel 需要向后兼容,橫豎是個訂閱回調,那我還不如自己擼一個得了:

/**
 * @file utils/event.js
 */

/**
 * @const EMPTY_HANDLER
 * @desc 空事件回調,被取消事件將被指向此函數
 */
const EMPTY_HANDLER = () => {};

/**
 * @const eventSet - 事件監聽函數集
 */
const eventSet = {
 authorize: []
};

/**
 * @function emit - 發送全局事件
 * @param {String} type - 事件類型
 * @param {Object} event - 事件對象
 */
export const emit = (type, event) => (eventSet[type] || []).forEach(item => item(Object.freeze(event)));

/**
 * @function on - 注冊全局事件
 * @param {String} type - 事件類型
 * @param {Function} callback - 事件回調函數
 */
export const on = (type, callback) => {
 if (!eventSet[type]) {
  eventSet[type] = [];
 }

 if (!callback instanceof Function) {
  throw new Error('callback must be a Function!');
 }

 return eventSet[type].push(callback)
};

/**
 * @function off - 取消對某事件的監聽
 * @param {String} type - 事件類型 
 * @param {Number} id - 需要取消的事件ID,即 registEvent 所返回的值
 */
export const off = (type, id) => {
 if (!eventSet[type]) return

 eventSet[type][id - 1] = EMPTY_HANDLER

 // 如果某類事件已經全被取消的話,將其置為空數組
 const noListener = !eventSet[type].reduce((pre, cur) => (cur && cur === EMPTY_HANDLER) || pre, false);
 if (noListener){
  eventSet[type] = []
 };
}

然后是對 Page 函數的魔改:

/**
 * @file utils/auth-page.js
 */

import { on } from '/event.js';

export const AuthPage = function(options){
 const { onAuth, data, onLoad } = options;
 const userInfo = {
  nickName: '', // 昵稱
  account: '', // 賬號
  avatar: { // 頭像
   small: '',
   middle: '',
   large: ''
  },
  title: 'student', // 頭銜
  phoneNumber: 0, // 電話號碼
  gender: 'secret', // 性別
  'class': '' // 班級
 }

 if (options.data){
  options.data.authorized = false;
  options.data.userInfo = userInfo
 } else {
  options.data = {
   authorized: false,
   userInfo: userInfo
  }
 }

 /**
  * 仍舊調用原始的 Page 方法
  */
 Page(Object.assign(
  options,
  {
   onLoad: function () {
    const { authorize, userInfo } = getApp().globalData;

    // 執行開發者期望的 onload 事件
    onLoad instanceof Function && onLoad.bind(this)(arguments);

    // 頁面初始化時,若已經授權,直接執行授權回調
    // 否則將授權回調注冊為授權事件回調
    if (onAuth instanceof Function){
     if (authorize.authorized){
      onAuth.bind(this)({
       type: 'authorize',
       authorized: true,
       token: authorize.token,
       userInfo: userInfo
      });
     } else {
      on('authorize', onAuth.bind(this));
     }
    }
   }
  }
 ));
}

最后,在登錄組件的里:

import { emit } from '../../utils/event.js';

wx.login({
  success: res => {
    // ...這里省略了一些復雜的登錄流程
    getApp().globalData.authorize = {
      authorized: true
    };
    emit('authorize', res);
  }
})

以上就是怎么在微信小程序中監聽用戶登錄事件,小編相信有部分知識點可能是我們日常工作會見到或用到的。希望你能通過這篇文章學到更多知識。更多詳情敬請關注創新互聯行業資訊頻道。

本文標題:怎么在微信小程序中監聽用戶登錄事件
文章URL:http://www.2m8n56k.cn/article19/jjdsgh.html

成都網站建設公司_創新互聯,為您提供關鍵詞優化標簽優化自適應網站電子商務品牌網站設計域名注冊

廣告

聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:[email protected]。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯

商城網站建設
主站蜘蛛池模板: 亚洲成人性视频 | 亚洲精品资源网在线观看 | 亚洲一区免费 | 精品国产系列 | 亚洲艹| 欧美极品video粗暴 | 足恋玩丝袜脚视频免费网站 | 国产亚洲精品久久综合影院 | 亚洲精品国产精品国自产网站 | 男女扒开双腿猛进入免费网站 | 国产一区中文字幕在线观看 | 一级毛片视频播放 | 国产精品爱久久久久久久 | 国产视频网站在线观看 | 综合色久七七综合七七蜜芽 | 久久久国产一区二区三区 | 欧美熟videos肥婆 | 日韩欧美在线观看视频一区二区 | 亚洲在线免费 | 日韩国产毛片 | 亚洲黄色官网 | 国产欧美亚洲三区久在线观看 | 精品自拍视频在线观看 | 久久久久女人精品毛片 | 国产国产人免费人成成免视频 | 欧美孕交视频 | 国产亚洲一区二区三区在线观看 | 美日韩一区二区 | 深夜在线观看大尺度 | 国产福利片在线 易阳 | 久草视频网站 | 三级毛片在线免费观看 | 美国一级片在线 | 精品成人 | 日本护士一级毛片在线播放 | 一个人看的日本www的免费视频 | 欧美xxxxxxxxxxxxx| 欧美三级日韩 | 毛片在线播放网址 | 日韩精品中文字幕在线观看 | 麻豆一级片 |