国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

微信小程序 實(shí)現(xiàn)導(dǎo)航守衛(wèi)

這篇具有很好參考價(jià)值的文章主要介紹了微信小程序 實(shí)現(xiàn)導(dǎo)航守衛(wèi)。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

小程序中是不支持路由攔截的,需要開發(fā)者自行封裝路由攔截的功能,實(shí)踐有許多的實(shí)現(xiàn)思路,下面我采用的是封裝組件的方式實(shí)現(xiàn)。比方說一個(gè)小程序項(xiàng)目只有一兩個(gè)頁面是不需要登錄就可以訪問的,其他頁面都是需要登錄之后才能訪問的,那我就用封裝一些邏輯來檢測用戶是否是登錄狀態(tài),如果不是則重定向到登錄頁,等用戶完成登錄后再跳轉(zhuǎn)到用戶本來要訪問的頁面。

主要實(shí)現(xiàn)原理:通過本地存儲(chǔ)的?token?來判斷用戶的登錄狀態(tài),在小程序啟動(dòng)時(shí)讀取本地存儲(chǔ)并記錄到應(yīng)用實(shí)例當(dāng)中,方便其它頁面全局訪問:

主要步驟:

  1. 封裝名稱為?authorization?的組件
  2. 在生命周期函數(shù)onLaunch中讀取全局中記錄的?token?數(shù)據(jù)
  3. 獲取當(dāng)前頁面的路徑,在未登陸的情況下通過地址參數(shù)傳給登錄頁面
// app.js
App({
  onLaunch() {
    //調(diào)用函數(shù) 讀取 token
    this.getToken()
  },
   //封裝獲取token的函數(shù)
  getToken() {
    // 異步方式不會(huì)阻塞
    wx.getStorage({
      key: 'token',
      success: ({ data }) => {
        // this 指向應(yīng)用實(shí)例
        this.token = data
      },
      fail() {},
    })
  }
})

封裝組件?

在根目錄創(chuàng)建?components/authorization?目錄,然后在?app.json?中全局注冊(cè)該組件:

微信小程序 實(shí)現(xiàn)導(dǎo)航守衛(wèi)

{
  ...
  "usingComponents": {
    "authorization": "/components/authorization/index"
  }
  ...
}

接下來在【房屋列表】頁面應(yīng)用?authorization?組件:

<!-- house_pkg/pages/list/index.wxml -->
<authorization>
  <block wx:if="{{true}}">
    ...
  </block>
  <view wx:else class="blank">
    您還沒有認(rèn)證房屋,請(qǐng)點(diǎn)擊 <navigator hover-class="none" class="link" url=" ">添加</navigator>
  </view>
</authorization>

當(dāng)前?authorization?組件是沒有執(zhí)行任何邏輯的,接下來咱們?nèi)ソM件中添加插槽?slot:

<!-- 用戶未登錄就不顯示頁面的內(nèi)容 -->
<slot wx:if="{{isLogin}}"></slot>

此時(shí)跳轉(zhuǎn)到【房屋列表】時(shí)會(huì)出現(xiàn)空白的內(nèi)容,原因是?isLogin?的值當(dāng)前為?undefined?即為?false?假值。

讀取登錄狀態(tài)

在上面isLogin?的數(shù)并未進(jìn)行初始化且為假值,接下來咱們?cè)谏芷诤瘮?shù)?attached?中讀取一個(gè)用戶的登錄狀態(tài):

// components/authorization/index.js
Component({
  data: {
    isFlag: false,
  },
  // 生命周期函數(shù)
  lifetimes: {
    attached() {
      // 登錄狀態(tài)
      const isFlag= !!getApp().token
      // 記錄登錄狀態(tài)
      this.setData({ isFlag})
      // 未登錄重定向到登錄頁
      if (!isFlag) {
        // 引導(dǎo)用戶到登錄頁面
        wx.redirectTo({
          url: `/pages/login/index`,
        })
      }
    },
  },
})

獲取頁面路徑

在用戶完成登錄后頁面要回到用戶原本要訪問的頁面,要實(shí)現(xiàn)這個(gè)功能需要咱們先獲取用戶正在訪問的頁面路徑,然后把這個(gè)路徑傳給登錄頁面,這樣在登錄成功后便可以再跳轉(zhuǎn)到回這個(gè)頁面了,獲取頁面路徑的方法如下:

// components/authorization/index.js
const app=getApp()
Component({
  data: {
    isFlag: false,
    redirect:''
    
  },
  // 生命周期函數(shù)
  lifetimes: {
    attached() {
       // 記錄登錄狀態(tài)
       this.setData({
        isFlag: app.token ? 'true' : "false"
      })
  
     //  如果未登錄重定向到登錄頁面 將當(dāng)前頁面的路徑存下來 
      if (!app.token) {
        wx.redirectTo({
          url: '/pages/login/index'
        })
      }
    },
  },
})
 

? ? 獲取當(dāng)前頁面的路徑,在未登陸的情況下通過地址參數(shù)傳給登錄頁面

完成登錄頁面的功能之后 登錄成功就可以根據(jù)保存的路徑跳轉(zhuǎn)到當(dāng)前頁面

// components/authorization/index.js
const app=getApp()
Component({
  data: {
    isFlag: false,
    redirect:''
    
  },
  // 生命周期函數(shù)
  lifetimes: {
    attached() {
       // 記錄登錄狀態(tài)
       this.setData({
        isFlag: app.token ? 'true' : "false"
      })
  
        // 讀取當(dāng)前歷史棧getCurrentPages()   第一個(gè)歷史頁面getCurrentPages()[0]
      // console.log(getCurrentPages()[getCurrentPages().length-1].route,789); //最后一個(gè)歷史頁面
      const redirect = getCurrentPages()[getCurrentPages().length - 1].route
      console.log(redirect);
      if (!app.token) {
        wx.redirectTo({
        //獲取當(dāng)前頁面的路徑,在未登陸的情況下通過地址參數(shù)傳給登錄頁面
          url: '/pages/login/index?redirect=/' + redirect
        })
        this.setData({
          redirect: redirect
        })

    },
  },
})

在登錄頁面的onLoad 中拿到傳遞過來的歷史路徑 登錄成功跳回到歷史路徑

 // 跳轉(zhuǎn)頁面  寫活:登錄成功就要跳回到上一個(gè)歷史頁面
    wx.redirectTo({
      // url: '/pages/index/index',
      url: this.data.redirect || '/pages/my/index'
    })
  },
  // 拿到歷史頁面路徑redirect
  onLoad(option) {
    console.log(option.redirect, 123456);
    this.setData({
      redirect: option.redirect
    })
  },

?登錄頁面整體邏輯如下文章來源地址http://www.zghlxwxcb.cn/news/detail-498381.html

登錄頁面login/index
const app=getApp()
Page({
  data: {
    countDownVisible: false, //
    mobile: '13066668888',
    code: '', //用戶輸入的驗(yàn)證碼  登錄請(qǐng)求的時(shí)候后端接口需要的是code
    userCode: '', //通過手機(jī)號(hào)發(fā)請(qǐng)求拿到的code
    redirect:'' //歷史頁面路徑
  },
  // 表單輸入事件  獲取輸入的手機(jī)號(hào) 
  InputHandle(e) {
    console.log(e.detail, '獲取輸入的手機(jī)號(hào)');
    this.setData({
      mobile: e.detail
    })
  },
  // 獲取輸入的驗(yàn)證碼
  CodeHandle(e) {
    console.log(e.detail, '獲取輸入的驗(yàn)證碼');
    this.setData({
      code:e.detail
    })
  },
  // 點(diǎn)擊獲取驗(yàn)證碼
  async start() {
    //1 校驗(yàn)手機(jī)號(hào)是否合法 如果合法就發(fā)請(qǐng)求 發(fā)送驗(yàn)證碼
    const reg = /^(0|86|17951)?(13[0-9]|15[012356789]|166|17[3678]|18[0-9]|14[57])[0-9]{8}$/
    let flag = reg.test(this.data.mobile) //如果手機(jī)號(hào)不合法 返回false
    if (!flag) {
      wx.utils.toast('請(qǐng)輸入合法手機(jī)號(hào)')
    }
    // 發(fā)請(qǐng)求,獲取驗(yàn)證碼
    const res = await wx.http.get('/code', {
      mobile: this.data.mobile.trim()
    })
    this.setData({
      countDownVisible: true,
      userCode: res.data.code
    })
    console.log(res, 3333); //獲取的code
  },
  // 點(diǎn)擊登錄  跳轉(zhuǎn)到之前的歷史頁面
 async loginHandle(){
      //  拿到點(diǎn)擊獲取的隨機(jī)驗(yàn)證碼  與輸入的驗(yàn)證碼進(jìn)行校驗(yàn) 如果一致則登錄 否則提示驗(yàn)證碼錯(cuò)誤
    if(this.data.code!==this.data.userCode) return wx.utils.toast('請(qǐng)輸入正確的驗(yàn)證碼')
    // 如果是一致就發(fā)請(qǐng)求登錄
    const res =await wx.http.post('/login',{
      mobile:this.data.mobile,
      code:this.data.code
    })
    console.log(res,44444);  //可以拿到token 和 refreshToken 存在本地和app.js中 存在本地中是為了token持久化
    app.token=res.data.token,
    app.refreshToken=res.data.refreshToken,
    wx.setStorage({
      key:'token',
      data:app.token
    })
    wx.setStorage({
      key:'refreshToken',
      data:app.refreshToken
    })
    // 跳轉(zhuǎn)頁面  寫活:登錄成功就要跳回到上一個(gè)歷史頁面
    wx.redirectTo({
      // url: '/pages/index/index',
      url: this.data.redirect || '/pages/my/index'
    })
  },
  // 拿到歷史頁面路徑redirect
  onLoad(option) {
    console.log(option.redirect, 123456);
    this.setData({
      redirect: option.redirect
    })
  },
  // 獲取倒計(jì)時(shí)信息
  countDownChange(ev) {
    this.setData({
      timeData: ev.detail,
      countDownVisible: ev.detail.minutes === 1 || ev.detail.seconds > 0,
    })
  },
})

到了這里,關(guān)于微信小程序 實(shí)現(xiàn)導(dǎo)航守衛(wèi)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • React導(dǎo)航守衛(wèi)(V5路由)

    下載: 當(dāng)我們進(jìn)行路由跳轉(zhuǎn)的時(shí)候,有時(shí)候需要滿足某種條件才能跳轉(zhuǎn),比如我只有我們登錄成功之后才能到首頁面,否則就不能到首頁面,這時(shí)候我們就需要對(duì)路由進(jìn)行攔截。 例如: (1)當(dāng)我們登錄的時(shí)候存儲(chǔ)一個(gè)會(huì)話存儲(chǔ) (2)然后我們給訪問頁面添加一個(gè)判斷 //封裝一個(gè)判

    2024年01月19日
    瀏覽(30)
  • React導(dǎo)航守衛(wèi)(V6路由)

    下載: 當(dāng)?shù)卿浿蟛趴梢匀ピL問其他頁面 (1)在登錄頁面,我們點(diǎn)擊登錄的時(shí)候,保存一個(gè)token,在登錄頁面引入重定向useNavigate (2)在存放路由的文件中,封裝一個(gè)高階組件 封裝一個(gè)高階組件(其實(shí)就是函數(shù),這個(gè)函數(shù)要接收一個(gè)組件作為參數(shù),返回一個(gè)組件) (3)當(dāng)我們給首頁

    2024年01月18日
    瀏覽(40)
  • 小程序?qū)崿F(xiàn)路由守衛(wèi),小程序路由攔截

    1.首先,在小程序的全局配置中定義一個(gè) 路由守衛(wèi)對(duì)象 ,可以 命名 為 routerGuard 。 2.在 routerGuard 對(duì)象中定義需要使用的守衛(wèi)方法,例如 beforeEach、afterEach 等。 3.在 每個(gè)頁面 的 生命周期函數(shù) 中調(diào)用相應(yīng)的守衛(wèi)方法。在小程序中,常用的生命周期函數(shù)有onLoad、onShow、onHide等。

    2024年02月04日
    瀏覽(19)
  • 微信小程序:簡單實(shí)現(xiàn)地圖導(dǎo)航功能實(shí)現(xiàn)

    微信小程序:簡單實(shí)現(xiàn)地圖導(dǎo)航功能實(shí)現(xiàn)

    里面的小圖片需要自己找,真機(jī)調(diào)試時(shí),點(diǎn)擊導(dǎo)航即可進(jìn)入地圖,可導(dǎo)航,規(guī)劃路線… 效果圖 代碼: wxml js wxss

    2024年02月11日
    瀏覽(30)
  • 高德地圖實(shí)現(xiàn)-微信小程序地圖導(dǎo)航

    高德地圖實(shí)現(xiàn)-微信小程序地圖導(dǎo)航

    1、在高德開放平臺(tái)注冊(cè)成為開發(fā)者 2、申請(qǐng)開發(fā)者密鑰(key)。 3、下載并解壓高德地圖微信小程序SDK 注冊(cè)賬號(hào)(https://lbs.amap.com/)) 申請(qǐng)小程序應(yīng)用的 key 應(yīng)用管理(https://console.amap.com/dev/key/app)) - 我的應(yīng)用 - 創(chuàng)建新應(yīng)用 生成的 key 即可用在程序中 下載相關(guān) sdk 文件,導(dǎo)入 amap-

    2024年02月08日
    瀏覽(100)
  • 路由緩存問題 | vue-router的導(dǎo)航守衛(wèi)

    路由緩存問題 | vue-router的導(dǎo)航守衛(wèi)

    ???????? 帶參路由,當(dāng) 參數(shù)發(fā)生變化時(shí),相同的組件實(shí)例將被復(fù)用 ,組件的 生命周期鉤子不會(huì)被調(diào)用, 導(dǎo)致 請(qǐng)求不會(huì)被重新發(fā)送, 以至于 數(shù)據(jù)無法更新 。 兩種解決方法: 1. 給 RouterView綁定key值 ,即 特點(diǎn):不復(fù)用,破壞組件緩存,強(qiáng)制執(zhí)行,存在一定的 浪費(fèi) ,即

    2024年02月09日
    瀏覽(30)
  • 編程式導(dǎo)航、緩存路由組件、路由守衛(wèi)、Vue UI組件庫【VUE】

    作用:不借助 router-link 實(shí)現(xiàn)路由跳轉(zhuǎn),讓路由跳轉(zhuǎn)更加靈活 具體編碼: 作用:讓不展示的路由組件保持掛載,不被銷毀 具體編碼: 作用:路由組件所獨(dú)有的兩個(gè)鉤子,用于捕獲路由組件的激活狀態(tài)。 具體名字: (1)activated路由組件被激活時(shí)觸發(fā) (2)deactivated路由組件失

    2024年02月03日
    瀏覽(54)
  • Vue2路由:手動(dòng)配置使用路由&路由嵌套、路由動(dòng)態(tài)傳參(:參數(shù),query、props)、編程式導(dǎo)航(back、go)、導(dǎo)航守衛(wèi)

    Vue2路由:手動(dòng)配置使用路由&路由嵌套、路由動(dòng)態(tài)傳參(:參數(shù),query、props)、編程式導(dǎo)航(back、go)、導(dǎo)航守衛(wèi)

    過了一遍vue2的router,整理一下小結(jié) 目錄 一、前端路由的概念與原理 1.1 什么是路由 1.2 路由的工作方式 二、vue-router的基本使用 2.1 安裝、配置、使用router 2.2 redirect重定向 三、嵌套路由 3.1 聲明子路由的規(guī)則 3.2 默認(rèn)子路由 四、動(dòng)態(tài)路由 4.1 動(dòng)態(tài)路由的概念 4.2 動(dòng)態(tài)路由取參方

    2024年02月05日
    瀏覽(24)
  • 20230706----重返學(xué)習(xí)-vue路由導(dǎo)航守衛(wèi)相關(guān)-物美后臺(tái)管理系統(tǒng)

    常見面試題 面試題:介紹一下 vue-router 中的導(dǎo)航守衛(wèi)函數(shù) 面試題:介紹一下你對(duì)vue-router的理解? 導(dǎo)航守衛(wèi)函數(shù) 面試題:介紹一下 vue-router 中的導(dǎo)航守衛(wèi)函數(shù) 在每一次路由切換的時(shí)候,首先把路由匹配、導(dǎo)航確認(rèn)等事宜先處理好-在此期間會(huì)觸發(fā)一系列的鉤子函數(shù),這些函數(shù)

    2024年02月12日
    瀏覽(52)
  • 基于微信小程序的校園導(dǎo)航小程序設(shè)計(jì)與實(shí)現(xiàn)

    基于微信小程序的校園導(dǎo)航小程序設(shè)計(jì)與實(shí)現(xiàn)

    ??博主介紹:?全網(wǎng)粉絲10W+,CSDN全棧領(lǐng)域優(yōu)質(zhì)創(chuàng)作者,博客之星、掘金/知乎/華為云/阿里云等平臺(tái)優(yōu)質(zhì)作者。 ???? 精彩專欄 推薦訂閱???? 計(jì)算機(jī)畢業(yè)設(shè)計(jì)精品項(xiàng)目案例(持續(xù)更新) ?? 文末獲取源碼+數(shù)據(jù)庫+文檔 ?? 感興趣的可以先收藏起來,還有大家在畢設(shè)選題,項(xiàng)

    2024年02月19日
    瀏覽(23)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包