路由设计
本则路由考虑验证进入登录页面,完成登录操作进入首页。
import Vue from "vue";import Router from "vue-router";Vue.use(Router);import store from "@/store/store";// (延迟加载)const Login = () => import("@/views/login");const Home = () => import("@/views/home");const HomeRoute = { path: "/", name: "首页", component: Home};export { HomeRoute };const router = new Router({ base: process.env.BASE_URL, routes: [ { path: "/login", name: "登录", component: Login }, HomeRoute ]});router.beforeEach((to, from, next) => { let loginName = store.state.user.loginName; if (to.path === "/" && loginName == "") { next("/login"); } else { next(); }});export default router;~~~~
数据模型
const state = { loginName: ""};const mutations = { SET_LOGINNAME(state, loginName) { state.loginName = loginName; }};const actions = { login({ commit }, userInfo) { return new Promise((res, ret) => { commit("SET_LOGINNAME", userInfo); res(); }); }, logout({ commit }) { return new Promise((res, ret) => { commit("SET_LOGINNAME", ""); res(); }); }};export default { namespaced: true, state, mutations, actions};
import Vue from "vue";import Vuex from "vuex";Vue.use(Vuex);import user from "./modules/user";const store = new Vuex.Store({ modules: { user }});export default store;
组件
import { mapState, mapMutations, mapActions } from "vuex";export default { name: "login", data() { return { currentVal: "", list: ["咨询服务", "音悦台", "体育台", "财经频道", "时尚资讯"], index: 0 }; }, computed: { ...mapState({ loginName: state => state.user.loginName }) }, methods: { ...mapActions({ login: "user/login" }), handleToHome() { let userInfo = "user"; this.login(userInfo); this.$router.push({ path: "/" }); }, handleKeydown() { this.currentVal = this.list[this.index]; this.index++; let len = this.list.length - 1; if (this.index > len) { this.index = 0; } }, reset() { this.index = 0; this.currentVal = ""; } }};