路由设计
本则路由考虑验证进入登录页面,完成登录操作进入首页。
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 = "";
}
}
};