最近在學習小程序方面的東西,遇到了一個問題,也是摸索好久才解決,特此記錄一下。
一般在項目里,很多地方都需要做一些登錄的限制,需要登錄之后才可以進行某些操作和查看,例如商品的詳情。驗證是否有 token ,沒有就到登錄頁面,登錄成功之后,uviewui 用 route 配置 redirectTo 再回到對應的詳情。但是在某些底部的 tabBar 頁面如果用這個配置項,就不會成功,需要用到 reLaunch 屬性。關於這兩個屬性的不同,官方文檔也有介紹(uviewui : https://www.uviewui.com/js/route.html,uniapp:https://uniapp.dcloud.io/api/router?id=navigateto)。思路就是判斷上一次的頁面是從哪里跳轉過來的,請教了別人,用 tab頁面頁面棧長度只為1,長度為一的情況下看path是否為tab,其他情況下paths-1看path。我是沒有發現可以區分得出來。所以我思考了一下,貌似在 pages.json 里有配置底部 tabbar 的數組,是否可以直接引入這個 json ,取出這個數組,於是 import 這個json,發現引入之后是一個空對象,我甚至一度懷疑是自己的路徑寫錯了。最后直接拷貝一份到 login 同目錄下。嘖嘖,是有值的。說明這個思路是沒有問題的。那現在的辦法是抽出這個配置項?還是有別的辦法?我選擇了后者,既然不能直接引用,那就再拷貝一份,在 vue.config.js 里配置一下 node,直接把這個 pages.json 拷貝成一個 js 文件,和pages 文件夾,建一個 route 的同級文件夾,名稱可以自己寫,不做限制。
const path = require('path')
const fs = require('fs')
const fromFile = path.join(__filename, '../pages.json')
const toFile = path.join(__filename, '../route/index.js')
const buffPrefix = Buffer.from('export default ')
const fileData = fs.readFileSync(fromFile)
fs.writeFileSync(toFile, buffPrefix + fileData)
module.exports = {
configureWebpack: {
plugins: [],
devServer: {
disableHostCheck: true
}
}
}
