vue-admin-template笔记(二)
文章目录Vue学习笔记(二)login404总结参考Vue学习笔记(二)学习vue-admin-templatehttps://github.com/PanJiaChen/vue-admin-template上一篇中分析了vue-admin-template的入口逻辑,包括main.js, App.vue, router。这篇根据router来分析下其他的页面。下面是一部分路由代码,...
Vue学习笔记(二)
学习vue-admin-template
https://github.com/PanJiaChen/vue-admin-template
上一篇中分析了vue-admin-template的入口逻辑,包括main.js, App.vue, router。这篇根据router来分析下其他的页面。
下面是一部分路由代码,也是这篇要分析的页面
{ path: '/login', component: () => import('@/views/login/index'), hidden: true },
{ path: '/404', component: () => import('@/views/404'), hidden: true },
login
<template>
<div class="login-container">
<el-form ref="loginForm" :model="loginForm" :rules="loginRules" class="login-form" auto-complete="on" label-position="left">
<h3 class="title">vue-admin-template</h3>
<el-form-item prop="username">
<span class="svg-container">
<svg-icon icon-class="user" />
</span>
<el-input v-model="loginForm.username" name="username" type="text" auto-complete="on" placeholder="username" />
</el-form-item>
<el-form-item prop="password">
<span class="svg-container">
<svg-icon icon-class="password" />
</span>
<el-input
:type="pwdType"
v-model="loginForm.password"
name="password"
auto-complete="on"
placeholder="password"
@keyup.enter.native="handleLogin" />
<span class="show-pwd" @click="showPwd">
<svg-icon icon-class="eye" />
</span>
</el-form-item>
<el-form-item>
<el-button :loading="loading" type="primary" style="width:100%;" @click.native.prevent="handleLogin">
Sign in
</el-button>
</el-form-item>
<div class="tips">
<span style="margin-right:20px;">username: admin</span>
<span> password: admin</span>
</div>
</el-form>
</div>
</template>
<script>
import { isvalidUsername } from '@/utils/validate'
export default {
name: 'Login',
data() {
const validateUsername = (rule, value, callback) => {
if (!isvalidUsername(value)) {
callback(new Error('请输入正确的用户名'))
} else {
callback()
}
}
const validatePass = (rule, value, callback) => {
if (value.length < 5) {
callback(new Error('密码不能小于5位'))
} else {
callback()
}
}
return {
loginForm: {
username: 'admin',
password: 'admin'
},
loginRules: {
username: [{ required: true, trigger: 'blur', validator: validateUsername }],
password: [{ required: true, trigger: 'blur', validator: validatePass }]
},
loading: false,
pwdType: 'password',
redirect: undefined
}
},
watch: {
$route: {
handler: function(route) {
this.redirect = route.query && route.query.redirect
//自动跳转指定页面
},
immediate: true //立即执行,而不是等到有变化时才执行
}
},
methods: {
showPwd() {
if (this.pwdType === 'password') {
this.pwdType = ''
} else {
this.pwdType = 'password'
}
},
handleLogin() {
this.$refs.loginForm.validate(valid => {
//会验证该form所有字段的返回值,如果有不通过的valid就是false
if (valid) {
this.loading = true
this.$store.dispatch('Login', this.loginForm).then(() => {
this.loading = false
this.$router.push({ path: this.redirect || '/' })
}).catch(() => {
this.loading = false
})
} else {
console.log('error submit!!')
return false
}
})
}
}
}
</script>
新术语解读:
- svg-icon icon-class=“user”
vue的使用svg-icon时,可以将svg保证成组件,可以到处使用,非常方便。通过svg-sprite-loader插件,可以非常方便轻松管理svg。
使用svg-sprite的好处- 页面代码清爽
- 可使用ID随处重复调用
- 每个SVG图标都可以更改大小颜色
详细可以参考https://segmentfault.com/a/1190000012213278
svg管理这个牵扯到另外两个知识点:- 是svg-sprite-loader插件使用,这个参考上面的链接,有固定模式
- 自动导入所有的svg模块,这个是一个非常方便并且高级的功能,还有一些别的功能。需要详细说明一下,代码如下:
const requireAll = requireContext => requireContext.keys().map(requireContext) //keys()也是一个函数,它返回一个数组,由所有可能被上下文模块处理的请求
const req = require.context('./svg', false, /\.svg$/) //创建context,获得svg目录下所有可以被导入的模块
requireAll(req) // 导入所有的svg模块
首先用require.context创建一个Context,
你还可以使用 require.context() 方法来创建自己的(模块)上下文。
你可以给这个方法传 3 个参数:
- 要搜索的文件夹目录,
- 是否还应该搜索它的子目录,
- 以及一个匹配文件的正则表达式。
webpack 会在构建的时候解析代码中的 require.context() 。语法如下:
require.context(directory, useSubdirectories = false, regExp = /^\.\//);
然后导入该context下的所有svg
参考:
- rule
element-ui 提供的表单输入验证规则,用于自定义验证
参考:element-ui中的表单验证 - native
如果vue事件侦听函数绑定到一个封装好的组件上的原生事件,则需要.native修饰符,如果是普通组件,则不需要该修饰符
参考:将原生事件绑定到组件 - watch route
监听路由变化,验证通过后,自动跳转指定页面
参考watch监听路由变化
小结
- 本小节分析了一下vue-admin-template的Login.Vue组件,主要是分析了一下html模板和js代码。重点学习了svg图标的管理导入,以及其它一些小知识点,例如watch监听路由变化,vue绑定组件原生事件,还有element-ui框架的验证规则使用。
404
<template>
<div class="wscn-http404-container">
<div class="wscn-http404">
<div class="pic-404">
<img class="pic-404__parent" src="@/assets/404_images/404.png" alt="404">
<img class="pic-404__child left" src="@/assets/404_images/404_cloud.png" alt="404">
<img class="pic-404__child mid" src="@/assets/404_images/404_cloud.png" alt="404">
<img class="pic-404__child right" src="@/assets/404_images/404_cloud.png" alt="404">
</div>
<div class="bullshit">
<div class="bullshit__oops">OOPS!</div>
<div class="bullshit__info">版权所有
<a class="link-type" href="https://wallstreetcn.com" target="_blank">华尔街见闻</a>
</div>
<div class="bullshit__headline">{{ message }}</div>
<div class="bullshit__info">请检查您输入的网址是否正确,请点击以下按钮返回主页或者发送错误报告</div>
<a href="" class="bullshit__return-home">返回首页</a>
</div>
</div>
</div>
</template>
<script>
export default {
name: 'Page404',
computed: {
message() {
return '网管说这个页面你不能进......'
}
}
}
</script>
小结:
1. 404页面就很简单了
总结
本篇就是分析了vue-admin-template的两个页面,分别是登录页面和404页面。通过分析,学习到以下两个重要知识点:
- svg管理与自动导入
- watch路由
参考
更多推荐
所有评论(0)