微信小程序(四十八)登入页面跳转与回跳

时间:2024-03-03 18:47:05

注释很详细,直接上代码

上一篇

新增内容:
1.在组件中获取当前页面的路由并通过参数传递给登入页面
2.提取传递的参数并在登入成功以后从登入页面回跳到原页面

源码:

app.js

App({
  globalData:{//定义全局变量
     isLoad:false
  }
 })
 

app.json

{
  "usingComponents": {
    "auth":"/components/auth/auth"
  },
  "pages": [
    "pages/index/index",
    "pages/begin/begin",
    "pages/start/start"
  ]
}

/components/auth/auth.wxml

<!-- 使用properties参数(是否登入) -->
<slot wx:if="{{isLoad}}"></slot>

/components/auth/auth.js

Component({
  behaviors: [],
  properties: {
    isLoad: {//接收参数(是否登入)
      type: Boolean,
      value: false
    }
  },
  lifetimes: {
    created() {//因为功能限制太多了,所以一般都不用这个
      
    },
    attached() {//这个比较常用
      const app=getApp()

      //如果没有登入
      if(!app.globalData.isLoad){
        const nowPages=getCurrentPages()
        const {route}=nowPages.pop()

        wx.redirectTo({//带参重定向
          url: '/pages/index/index?redirectUrl=/'+route,
        })

        //不延时弹窗提示会卡没
        setTimeout(()=>{
          wx.showToast({
            title: '未登入,已跳转到登入页面,请先登入!',
            icon:'none'
          })
        },1000)
        
      }
    },
    moved() {

    },
    detached() {

    },
  methods: {
    
  }
}
})


  

start.wxml

<button bind:tap="onTap" type="primary">进入需要登入才能看的页面</button>

start.js

// pages/start/start.js
Page({

  /**
   * 页面的初始数据
   */
  data: {

  },

  /**
   * 生命周期函数--监听页面加载
   */
  onLoad(options) {

  },

  /**
   * 生命周期函数--监听页面初次渲染完成
   */
  onReady() {

  },

  /**
   * 生命周期函数--监听页面显示
   */
  onShow() {

  },

  /**
   * 生命周期函数--监听页面隐藏
   */
  onHide() {

  },

  /**
   * 生命周期函数--监听页面卸载
   */
  onUnload() {

  },

  /**
   * 页面相关事件处理函数--监听用户下拉动作
   */
  onPullDownRefresh() {

  },

  /**
   * 页面上拉触底事件的处理函数
   */
  onReachBottom() {

  },

  /**
   * 用户点击右上角分享
   */
  onShareAppMessage() {

  },
  onTap(){
    wx.redirectTo({//跳转到登入页面
      url: '/pages/begin/begin',
    })
  }
})

begin.wxml

<auth isLoad="{{isLoad}}"><!-- 传输参数(是否登入) -->
  <view class="tip">
  登入以后可以查看的内容
  </view>
</auth>

begin.wxss

.tip{
  font-size: 60rpx;
  color:palegreen; 
  margin-top: 200rpx;
  padding: 0rpx 30rpx;
  background-color: bisque;
}

begin.js

// pages/begin/begin.js
Page({

  /**
   * 页面的初始数据
   */
  data: {
    //参数:是否登入
    isLoad:false
  },

  /**
   * 生命周期函数--监听页面加载
   */
  onLoad(options) {
   //进入这个页面同步登入状态
   const app=getApp()

   this.setData({
     isLoad:app.globalData.isLoad
   })
  },

  /**
   * 生命周期函数--监听页面初次渲染完成
   */
  onReady() {

  },

  /**
   * 生命周期函数--监听页面显示
   */
  onShow() {

  },

  /**
   * 生命周期函数--监听页面隐藏
   */
  onHide() {

  },

  /**
   * 生命周期函数--监听页面卸载
   */
  onUnload() {

  },

  /**
   * 页面相关事件处理函数--监听用户下拉动作
   */
  onPullDownRefresh() {

  },

  /**
   * 页面上拉触底事件的处理函数
   */
  onReachBottom() {

  },

  /**
   * 用户点击右上角分享
   */
  onShareAppMessage() {

  }
})

index.wxml

<button type="primary" bind:tap="inLoad">登入</button>

index.js

Page({
  data:{
    isLoad:false,
    redirectUrl:''
  },
  onLoad({redirectUrl}){//接收并解构重定向参数
    // console.log(redirectUrl)

    this.setData({//存储跳转之前的页面
      redirectUrl:redirectUrl
    })
  },

  //登入
  inLoad(){
    //修改全局变量为true
    const app=getApp()
    app.globalData.isLoad=true
    //console.log(app.globalData.isLoad)
    
    this.setData({//修改页面数据
      isLoad:app.globalData.isLoad
    })

    //登入以后跳转到之前的页面
    wx.redirectTo({
      url: this.data.redirectUrl
     })
  }
})

效果演示:

在这里插入图片描述