import { createApp } from 'vue'
import App from './App.vue'
import router from './router'
import store from './store'
const app = createApp(App)
app.use(router)
app.use(store)
app.mount('#app')
import { createRouter, createWebHistory } from 'vue-router'
import ColumnDetail from './views/ColumnDetail.vue'
import Login from './views/Login.vue'
import Home from './views/Home.vue'
import CreatePost from './views/CreatePost.vue'
import store from './store'
const routerHistory = createWebHistory()
const router = createRouter({
history: routerHistory,
routes: [
{
path: '/',
name: 'home',
component: Home
},
{
path: '/login',
name: 'login',
component: Login,
meta: { //路由元信息控制
redirectAlreadyLogin: true
}
},
{
path: '/create',
name: 'create',
component: CreatePost,
meta: {
requiredLogin: true
}
},
{
path: '/column/:id',
name: 'column',
component: ColumnDetail
}
]
})
router.beforeEach((to, from, next) => {
if (to.meta.requiredLogin && !store.state.user.isLogin) {
next({ name: 'login' })
} else if (to.meta.redirectAlreadyLogin && store.state.user.isLogin) {
next('/')
} else {
next()
}
})
export default router
import { createStore } from 'vuex'
import { testData, testPosts, ColumnProps, PostProps } from './testData'
interface UserProps {
isLogin: boolean;
name?: string;
id?: number;
}
export interface GlobalDataProps {
columns: ColumnProps[];
posts: PostProps[];
user: UserProps;
}
const store = createStore<GlobalDataProps>({
state: {
columns: testData,
posts: testPosts,
user: { isLogin: true, name: 'xx', id: 1 }
},
mutations: {
login (state) {
state.user = { ...state.user, isLogin: true, name: 'test' }
}
}
})
export default store
import { useRouter, useRoute } from 'vue-router'
import { useStore } from 'vuex'
setup(){
const router = useRouter()
const store = useStore<GlobalDataProps>()
const user = computed(() => store.state.user)
router.push({ name: 'column', params: { id: 1 } })
store.commit('login')
const route = useRoute()
const currentId = +route.params.id
return {
}
}
<div v-if="$route.query.id"></div>
<div @click="$router.path({path:'/login'})"> {{$store.state.token}}</div>