购物网站开发文档,wordpress+上一篇+下一篇,wordpress w3 total cache,最新新闻热点评论路由元信息#xff08;Route Meta Information#xff09;是在路由配置中为每个路由定义的一组自定义数据。这些数据可以包含任何你希望在路由中传递和使用的信息#xff0c;比如权限、页面标题、布局设置等。Vue Router 允许你在路由配置中定义元信息#xff0c;然后在组件…路由元信息Route Meta Information是在路由配置中为每个路由定义的一组自定义数据。这些数据可以包含任何你希望在路由中传递和使用的信息比如权限、页面标题、布局设置等。Vue Router 允许你在路由配置中定义元信息然后在组件中访问这些信息。
在 Vue Router 中你可以通过 meta 字段来定义路由的元信息。下面是一个定义title的示例 index.ts
import { createRouter, createWebHistory } from vue-routerdeclare module vue-router {interface RouteMeta {title: string}
}export const router createRouter({// import.meta.env.BASE_URL 应用的基本 URL。基本 URL 是指在你的应用部署到某个域名或子路径时URL 的起始部分。例如如果你的应用部署在 https://example.com/myapp/ 这个路径下那么 import.meta.env.BASE_URL 就会是 /myapp/。history: createWebHistory(import.meta.env.BASE_URL),routes: [{path: /,component: () import(/views/Login.vue),meta: {title: 登录页,}},{path: /index,component: () import(/views/Index.vue),meta: {title: 首页,}},],
})loadingBar.vue
templatediv classwrapsdiv refbar classbar/div/div
/templatescript setup langts
import { ref, onMounted } from vue
let speed refnumber(1)
let bar refHTMLElement()
let timer refnumber(0)
const startLoading () {speed.value 1let dom bar.value as HTMLElementtimer.value window.requestAnimationFrame(function fn() {if (speed.value 90) {speed.value 1;dom.style.width speed.value %timer.value window.requestAnimationFrame(fn)} else {speed.value 1window.cancelAnimationFrame(timer.value)}})
}
const endLoading () {let dom bar.value as HTMLElementsetTimeout(() {window.requestAnimationFrame(() {speed.value 100dom.style.width speed.value %})}, 500)}defineExpose({ startLoading, endLoading })
/scriptstyle scoped langless
.wraps {width: 100%;position: fixed;height: 10px;top: 0;.bar {height: inherit;width: 0;background-color: #409eff;}
}
/styleIndex.vue
templateh1我进来啦/h1
/templatescript setup langts/scriptstyle scoped/styleLogin.vue
templatediv classloginel-card classbox-cardel-form refform :rulesrules :modelformInline classdemo-form-inlineel-form-item propuser label账号el-input v-modelformInline.user placeholder请输入账号 //el-form-itemel-form-item proppassword label密码el-input v-modelformInline.password placeholder请输入密码 typepassword/el-input/el-form-itemel-form-itemel-button typeprimary clickonSubmit登录/el-button/el-form-item/el-form/el-card/div
/templatescript setup langts
import { reactive, ref } from vue
import { useRouter } from vue-router
import type { FormItemRule, FormInstance } from element-plus;
import { ElMessage } from element-plusconst router useRouter()
type Form {user: string,password: string
}
type Rules {[k in keyof Form]?: ArrayFormItemRule
}
const formInline reactiveForm({user: ,password: ,
})
const form refFormInstance()
const rules reactive({user: [{required: true,message: 请输入账号,type: string,}],password: [{required: true,message: 请输入密码,type: string,}]
})const onSubmit () {console.log(submit!, form.value)form.value?.validate((validate){if (validate) {router.push(/index)localStorage.setItem(token, 1)} else {ElMessage.error(账号或密码错误)}})}
/scriptstyle scoped langless
.login {height: 100%;display: flex;justify-content: center;align-items: center;
}
/styleApp.vue
templaterouter-view/router-view
/templatescript setup langts/scriptstyle
/* 注意 style 标签 别加 scoped 不然设置宽高不生效 */
* {margin: 0;padding: 0;
}
html, body, #app {height: 100%;overflow: hidden;
}
/stylemain.ts
import { createApp,createVNode,render } from vue
import App from ./App.vue
import {router} from ./router
// import 引入
import ElementPlus from element-plus
import element-plus/dist/index.css
import loadingBar from ./components/loadingBar.vueconst Vnode createVNode(loadingBar)
render(Vnode,document.body)
const app createApp(App)
app.use(router)
// use 注入 ElementPlus 插件
app.use(ElementPlus)const whiteList [/]// beforeEach 可以定义不止一个vue会收集所有定义的路由钩子所以next的作用不应该是跳转而是使步骤进行到下一个你定义的钩子
router.beforeEach((to, from, next) {document.title to.meta.titleVnode.component?.exposed?.startLoading()// token每次都要跟后端校验一下是否过期if(whiteList.includes(to.path) || localStorage.getItem(token)){next()}else{next(/)}
})router.afterEach((to, from) {Vnode.component?.exposed?.endLoading()
})
app.mount(#app)