国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Vue系列第四篇:Vue2 + Element開發(fā)登錄頁(yè)面

這篇具有很好參考價(jià)值的文章主要介紹了Vue系列第四篇:Vue2 + Element開發(fā)登錄頁(yè)面。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

? ? ? ?Vue開發(fā)中Element是一個(gè)比較受歡迎的界面庫(kù),實(shí)際開發(fā)中Vue2搭配Element UI開發(fā),Vue3搭配Element plus開發(fā),今天就用Vue2 + Element來(lái)開發(fā)登錄頁(yè)面。

目錄

1.Element UI介紹

1.1官網(wǎng)

1.2element-ui安裝

2.開發(fā)環(huán)境準(zhǔn)備

2.1core-js安裝

2.2瀏覽器自動(dòng)打開和關(guān)閉useEslint校驗(yàn)配置

2.3Element UI全局引入

2.4Element UI按需引入

2.5 SASS: CSS預(yù)處理器

2.6?LASS: 另外一個(gè)CSS預(yù)處理器

2.7??默認(rèn)CSS重置文件:

2.8?圖標(biāo)庫(kù)安裝

2.9?axios和路由安裝

3.登錄頁(yè)面開發(fā)

3.1 版本1

3.2?版本2

3.3?版本3

3.4?版本4

4.運(yùn)行效果

4.1 代碼結(jié)構(gòu)

4.2 效果

5.JS中var let const區(qū)別


1.Element UI介紹

? ? ? ? Element UI是一套為開發(fā)者、設(shè)計(jì)師和產(chǎn)品經(jīng)理準(zhǔn)備的基于Vue 2.0的桌面端元組件庫(kù),由餓了么前端團(tuán)隊(duì)推出。它并不依賴于Vue,卻是一個(gè)十分適合Vue項(xiàng)目的框架。可使用Element UI輕松制作出網(wǎng)頁(yè),為前端開發(fā)人員大大減輕了代碼負(fù)擔(dān)。

1.1官網(wǎng)

https://element.eleme.cn/#/en-US/component/installation

1.2element-ui安裝

npm i element-ui -S

2.開發(fā)環(huán)境準(zhǔn)備

2.1core-js安裝

? ? ? core-js 它是JavaScript標(biāo)準(zhǔn)庫(kù)的 polyfill(墊片/補(bǔ)?。? 新功能的es'api'轉(zhuǎn)換為大部分現(xiàn)代瀏覽器都可以支持運(yùn)行的一個(gè)'api' 補(bǔ)丁包集合。
npm install --save core-js

2.2瀏覽器自動(dòng)打開和關(guān)閉useEslint校驗(yàn)配置

文件:
config/index.js
設(shè)置:
autoOpenBrowser: true
useEslint: false

2.3Element UI全局引入

? ? ?需要在main.js引入如下模塊
import ElementUI from 'element-ui'
import 'element-ui/lib/theme-chalk/index.css'
Vue.use(ElementUI)

2.4Element UI按需引入

?參考網(wǎng)址:
https://element.eleme.cn/#/zh-CN/component/quickstart
babel安裝:
cnpm install babel-plugin-component -D
babel配置:.babelrc中增加
"plugins": [
? ? [
? ? ? "component",
? ? ? {
? ? ? ? "libraryName": "element-ui",
? ? ? ? "styleLibraryName": "theme-chalk"
? ? ? }
? ? ]
? ]
??

2.5 SASS: CSS預(yù)處理器

官網(wǎng)
https://www.sass.hk/
安裝:
sudo apt install ruby-sass
npm i sass-loader@7 node-sass

node-sass版本過(guò)高導(dǎo)致的,卸載重裝低版本:
(1) 卸載已安裝版本 npm uninstall node-sass
(2) 安裝 npm install node-sass@4.14.1
(3) npm run dev

引用:

<style lang="scss">
? ? .hello {
? ? ? ? background: yello;
? ? ? ? .el-button {
? ? ? ? ? ? color: red;
? ? ? ? }
? ? }
</style>

查看版本:
sass -v

2.6?LASS: 另外一個(gè)CSS預(yù)處理器

安裝:

npm i less@3 less-loader@7 -S --force

引用:

<style lang="less">
? ? .hello {
? ? ? ? background: yello;
? ? ? ? .el-button {
? ? ? ? ? ? color: red;
? ? ? ? }
? ? }
</style>

2.7??默認(rèn)CSS重置文件:

https://meyerweb.com/eric/tools/css/reset/

2.8?圖標(biāo)庫(kù)安裝

npm i -D font-awesome

2.9?axios和路由安裝

axios:
npm i axios -S

路由:
npm i vue-router@3.5.3 -S

3.登錄頁(yè)面開發(fā)

src/main.js

//import '../plugins/element.js'
import Vue from 'vue'
import VueRouter from 'vue-router'
import Home from './components/Home.vue'
//import About from './components/HelloWorld.vue'
import NotFound from './components/MyFirst.vue'
import App from './App'
import 'font-awesome/css/font-awesome.min.css'
import axios from 'axios'

/*
//按需加載
import { Button, Tag } from 'element-ui'
Vue.use(Button)
Vue.use(Tag)
*/

// 掛載到原型就可以全局使用
Vue.prototype.axios = axios


import ElementUI from 'element-ui'
import 'element-ui/lib/theme-chalk/index.css'
Vue.use(ElementUI)


Vue.use(VueRouter)

const routes = [
? { path: '/', redirect: '/login', component: () => import('@/components/Login') },
? { path: '/login', name: 'Login', component: () => import('@/components/Login') },
? { path: '/home', component: Home },
? //{ path: '/about', component: About },
? //使用懶加載,官方推薦
? //{ path: '/about', component: () => import('@/components/HelloWorld.vue') },
? //{ path: '/about', component: () => import('@/components/HelloWorld') },
? //異步組件加載
? { path: '/about', component: resolve => require(['@/components/HelloWorld'], resolve)},
? { path: '*', component: NotFound }
]

const router = new VueRouter({
? mode: 'history',
? routes
})

new Vue({
? router,
? render: h => h(App)
}).$mount('#app2')

index.html

<!DOCTYPE html>
<html>
? <head>
? ? <meta charset="utf-8">
? ? <meta name="viewport" content="width=device-width,initial-scale=1.0">
? ? <title>demo</title>
? </head>
? <body>
? ? <div id="app2"></div>
? ? <!-- built files will be auto injected -->
? </body>
</html>

src/App.vue

<template>
<div id="myapp1111" class="hello">
<router-link to="/">Home</router-link>
<router-link to="/about">About</router-link>
<router-view></router-view>
<h1>hello</h1>
<el-button>你好</el-button>
<el-button type="primary">你好</el-button>
<el-button type="info">你好</el-button>
<el-button type="danger">你好</el-button>
<el-button type="success">你好</el-button>
<el-tag> fsfsd dsd dsfv</el-tag>
<i class="fa fa-user"></i>
<i class="fa fa-users"></i>
</div>
</template>

<style lang="scss">
? ? .hello {
? ? ? ? background: yello;
? ? ? ? .el-button {
? ? ? ? ? ? color: red;
? ? ? ? }
? ? }
@import url('./assets/css/reset.css')
</style>

src/assets/css/reset.css

/* http://meyerweb.com/eric/tools/css/reset/?
? ?v2.0 | 20110126
? ?License: none (public domain)
*/

html, body, div, span, applet, object, iframe,
h1, h2, h3, h4, h5, h6, p, blockquote, pre,
a, abbr, acronym, address, big, cite, code,
del, dfn, em, img, ins, kbd, q, s, samp,
small, strike, strong, sub, sup, tt, var,
b, u, i, center,
dl, dt, dd, ol, ul, li,
fieldset, form, label, legend,
table, caption, tbody, tfoot, thead, tr, th, td,
article, aside, canvas, details, embed,?
figure, figcaption, footer, header, hgroup,?
menu, nav, output, ruby, section, summary,
time, mark, audio, video {
?? ?margin: 0;
?? ?padding: 0;
?? ?border: 0;
?? ?font-size: 100%;
?? ?font: inherit;
?? ?vertical-align: baseline;
}
/* HTML5 display-role reset for older browsers */
article, aside, details, figcaption, figure,?
footer, header, hgroup, menu, nav, section {
?? ?display: block;
}
body {
?? ?line-height: 1;
}
ol, ul {
?? ?list-style: none;
}
blockquote, q {
?? ?quotes: none;
}
blockquote:before, blockquote:after,
q:before, q:after {
?? ?content: '';
?? ?content: none;
}
table {
?? ?border-collapse: collapse;
?? ?border-spacing: 0;
}

src/components/Home.vue

<template>
<div>
<h1>Home Page</h1>
<button @click="goToAbout">Go to About</button>
</div>
</template>

<script>
export default {
? methods: {
? ? goToAbout () {
? ? ? this.$router.push('/about')
? ? }
? }
}
</script>

3.1 版本1

src/components/Login_V1.vue

<template>
? <div class="login">
? ? <el-card class="box-card">
? ? ? ? <div slot="header" class="clearfix">
? ? ? ? ? ? <span>后臺(tái)管理系統(tǒng)</span>
? ? ? ? </div>

? ? ? ? <el-form label-width="100px" :model="form" ref="form">
? ? ? ? ? ? <el-form-item label="用戶名" prop='username'?
? ? ? ? ? ? :rules="[
? ? ? ? ? ? ? ? { required: true, message: '請(qǐng)輸入用戶名', trigger: 'blur'},
? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? min: 4,
? ? ? ? ? ? ? ? ? ? max: 10,
? ? ? ? ? ? ? ? ? ? message: '長(zhǎng)度在4-10位之間',
? ? ? ? ? ? ? ? ? ? trigger: 'blur'
? ? ? ? ? ? ? ? }
? ? ? ? ? ? ]"
? ? ? ? ? ? >
? ? ? ? ? ? ? ? <el-input v-model="form.username"></el-input>
? ? ? ? ? ? </el-form-item>
? ? ? ? ? ? <el-form-item label="密碼" prop='password'
? ? ? ? ? ? ? ? :rules="[
? ? ? ? ? ? ? ? { required: true, message: '請(qǐng)輸入密碼', trigger: 'blur'},
? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? min: 6,
? ? ? ? ? ? ? ? ? ? max: 12,
? ? ? ? ? ? ? ? ? ? message: '長(zhǎng)度在6-12位字符',
? ? ? ? ? ? ? ? ? ? trigger: 'blur'
? ? ? ? ? ? ? ? }
? ? ? ? ? ? ]"
? ? ? ? ? ? >
? ? ? ? ? ? ? ? <el-input type='password' v-model="form.password"></el-input>
? ? ? ? ? ? </el-form-item>
? ? ? ? ? ? <el-form-item>
? ? ? ? ? ? ? ? <el-button type='primary' @click="login('form')">登錄</el-button>
? ? ? ? ? ? </el-form-item>
? ? ? ? </el-form>
? ? </el-card>
? </div>
</template>

<script>
export default {
? data () {
? ? return {
? ? ? ? form: {
? ? ? ? ? ? username: '',
? ? ? ? ? ? password: ''
? ? ? ? }
? ? }
? },
? methods: {
? ? login(form) {
? ? ? ? this.$refs[form].validate((valid) => {
? ? ? ? ? ? if (valid) {
? ? ? ? ? ? ? ? console.log(this.form)
? ? ? ? ? ? } else {
? ? ? ? ? ? ? ? console.error(this.form)
? ? ? ? ? ? }
? ? ? ? })
? ? }
? }
}
</script>

<style lang='scss'>
? ? .login {
? ? ? ? width: 100%;
? ? ? ? height: 100%;
? ? ? ? position: absolute;
? ? ? ? background: #409EFF;
? ? ? ? .box-card {
? ? ? ? ? ? width: 450px;
? ? ? ? ? ? margin: 200px auto;
? ? ? ? ? ? .el-card_header {
? ? ? ? ? ? ? ? font-size: 34px;
? ? ? ? ? ? }
? ? ? ? ? ? .el-button {
? ? ? ? ? ? ? ? width: 100%;
? ? ? ? ? ? }
? ? ? ? }
? ? }
</style>

3.2?版本2

src/components/Login_V2.vue

<template>
? <div class="login">
? ? <el-card class="box-card">
? ? ? ? <div slot="header" class="clearfix">
? ? ? ? ? ? <span>后臺(tái)管理系統(tǒng)</span>
? ? ? ? </div>

? ? ? ? <el-form label-width="100px" :model="form" ref="form">
? ? ? ? ? ? <el-form-item label="用戶名" prop='username'?
? ? ? ? ? ? :rules="[
? ? ? ? ? ? ? ? { required: true, message: '請(qǐng)輸入用戶名', trigger: 'blur'},
? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? min: 4,
? ? ? ? ? ? ? ? ? ? max: 10,
? ? ? ? ? ? ? ? ? ? message: '長(zhǎng)度在4-10位之間',
? ? ? ? ? ? ? ? ? ? trigger: 'blur'
? ? ? ? ? ? ? ? }
? ? ? ? ? ? ]"
? ? ? ? ? ? >
? ? ? ? ? ? ? ? <el-input v-model="form.username"></el-input>
? ? ? ? ? ? </el-form-item>
? ? ? ? ? ? <el-form-item label="密碼" prop='password'
? ? ? ? ? ? ? ? :rules="[
? ? ? ? ? ? ? ? { required: true, message: '請(qǐng)輸入密碼', trigger: 'blur'},
? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? min: 6,
? ? ? ? ? ? ? ? ? ? max: 12,
? ? ? ? ? ? ? ? ? ? message: '長(zhǎng)度在6-12位字符',
? ? ? ? ? ? ? ? ? ? trigger: 'blur'
? ? ? ? ? ? ? ? }
? ? ? ? ? ? ]"
? ? ? ? ? ? >
? ? ? ? ? ? ? ? <el-input type='password' v-model="form.password"></el-input>
? ? ? ? ? ? </el-form-item>
? ? ? ? ? ? <el-form-item>
? ? ? ? ? ? ? ? <el-button type='primary' @click="login('form')">登錄</el-button>
? ? ? ? ? ? </el-form-item>
? ? ? ? </el-form>
? ? </el-card>
? </div>
</template>

<script>
export default {
? data () {
? ? return {
? ? ? ? form: {
? ? ? ? ? ? username: '',
? ? ? ? ? ? password: ''
? ? ? ? }
? ? }
? },
? methods: {
? ? login(form) {
? ? ? ? this.$refs[form].validate((valid) => {
? ? ? ? ? ? if (valid) {
? ? ? ? ? ? ? ? console.log(this.form)
? ? ? ? ? ? ? ? //this.$router.push('/about')
? ? ? ? ? ? ? ? this.axios.post('https://www.baidu.com/', this.form).then(res => {
? ? ? ? ? ? ? ? ? ? console.log(res)
? ? ? ? ? ? ? ? ? ? if (res.data.status === 200) {
? ? ? ? ? ? ? ? ? ? ? ? localStorage.setItem('username', res.data.username)
? ? ? ? ? ? ? ? ? ? ? ? this.$message({message: res.data.message, type: 'success'})
? ? ? ? ? ? ? ? ? ? ? ? this.$router.push('/home')
? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? })
? ? ? ? ? ? } else {
? ? ? ? ? ? ? ? console.error(this.form)
? ? ? ? ? ? }
? ? ? ? })
? ? }
? }
}
</script>

<style lang='scss'>
? ? .login {
? ? ? ? width: 100%;
? ? ? ? height: 100%;
? ? ? ? position: absolute;
? ? ? ? background: #409EFF;
? ? ? ? .box-card {
? ? ? ? ? ? width: 450px;
? ? ? ? ? ? margin: 200px auto;
? ? ? ? ? ? .el-card_header {
? ? ? ? ? ? ? ? font-size: 34px;
? ? ? ? ? ? }
? ? ? ? ? ? .el-button {
? ? ? ? ? ? ? ? width: 100%;
? ? ? ? ? ? }
? ? ? ? }
? ? }
</style>

3.3?版本3

src/components/Login_V3.vue

<template>
? <div class="login">
? ? <el-card class="box-card">
? ? ? ? <div slot="header" class="clearfix">
? ? ? ? ? ? <span>后臺(tái)管理系統(tǒng)</span>
? ? ? ? </div>

? ? ? ? <el-form label-width="100px" :model="form" ref="form" :rules='rules'>
? ? ? ? ? ? <el-form-item label="用戶名" prop='username'>
? ? ? ? ? ? ? ? <el-input v-model="form.username"></el-input>
? ? ? ? ? ? </el-form-item>
? ? ? ? ? ? <el-form-item label="密碼" prop='password'>
? ? ? ? ? ? ? ? <el-input type='password' v-model="form.password"></el-input>
? ? ? ? ? ? </el-form-item>
? ? ? ? ? ? <el-form-item>
? ? ? ? ? ? ? ? <el-button type='primary' @click="login('form')">登錄</el-button>
? ? ? ? ? ? </el-form-item>
? ? ? ? </el-form>
? ? </el-card>
? </div>
</template>

<script>
export default {
? data () {
? ? const validateName = (rule, value, callback) => {
? ? ? ? let reg = /(^[a-zA-Z0-9]{4,10}$)/;
? ? ? ? if (value === "") {
? ? ? ? ? ? callback(new Error("請(qǐng)輸入用戶名"));
? ? ? ? } else if (!reg.test(value)) {
? ? ? ? ? ? callback(new Error("請(qǐng)輸入4-10用戶名"));
? ? ? ? } else {
? ? ? ? ? ? callback();
? ? ? ? }
? ? };

? ? const validatePass = (rule, value, callback) => {
? ? ? ? let pass = /^\S*(?=\S{6,12})(?=\S*\d)(?=\S*[A-Z])(?=\S*[a-z])(?=\S*[!@#$%^&*? ])\S*$/;
? ? ? ? if (value === "") {
? ? ? ? ? ? callback(new Error("請(qǐng)輸入密碼"));
? ? ? ? } else if (!pass.test(value)) {
? ? ? ? ? ? callback(new Error("請(qǐng)輸入6-12位密碼需要包含大小寫和數(shù)字及特殊字符"));
? ? ? ? } else {
? ? ? ? ? ? callback();
? ? ? ? }
? ? };

? ? return {
? ? ? ? form: {
? ? ? ? ? ? username: "",
? ? ? ? ? ? password: "",
? ? ? ? },
? ? ? ? rules: {
? ? ? ? ? ? username: [{validator: validateName, required: true, trigger: "blur"}],
? ? ? ? ? ? password: [{validator: validatePass, required: true, trigger: "blur"}],
? ? ? ? },
? ? }
? },
? methods: {
? ? login(form) {
? ? ? ? this.$refs[form].validate((valid) => {
? ? ? ? ? ? if (valid) {
? ? ? ? ? ? ? ? console.log(this.form)
? ? ? ? ? ? ? ? //this.$router.push('/about')
? ? ? ? ? ? ? ? this.axios.post('https://www.baidu.com/', this.form).then(res => {
? ? ? ? ? ? ? ? ? ? console.log(res)
? ? ? ? ? ? ? ? ? ? if (res.data.status === 200) {
? ? ? ? ? ? ? ? ? ? ? ? localStorage.setItem('username', res.data.username)
? ? ? ? ? ? ? ? ? ? ? ? this.$message({message: res.data.message, type: 'success'})
? ? ? ? ? ? ? ? ? ? ? ? this.$router.push('/home')
? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? })
? ? ? ? ? ? } else {
? ? ? ? ? ? ? ? console.error(this.form)
? ? ? ? ? ? }
? ? ? ? })
? ? }
? }
}
</script>

<style lang='scss'>
? ? .login {
? ? ? ? width: 100%;
? ? ? ? height: 100%;
? ? ? ? position: absolute;
? ? ? ? background: #409EFF;
? ? ? ? .box-card {
? ? ? ? ? ? width: 450px;
? ? ? ? ? ? margin: 200px auto;
? ? ? ? ? ? .el-card_header {
? ? ? ? ? ? ? ? font-size: 34px;
? ? ? ? ? ? }
? ? ? ? ? ? .el-button {
? ? ? ? ? ? ? ? width: 100%;
? ? ? ? ? ? }
? ? ? ? }
? ? }
</style>

3.4?版本4

src/components/Login.vue

<template>
? <div class="login">
? ? <el-card class="box-card">
? ? ? ? <div slot="header" class="clearfix">
? ? ? ? ? ? <span>業(yè)務(wù)后臺(tái)管理系統(tǒng)</span>
? ? ? ? </div>

? ? ? ? <el-form label-width="100px" :model="form" ref="form" :rules='rules'>
? ? ? ? ? ? <el-form-item label="用戶名" prop='username'>
? ? ? ? ? ? ? ? <el-input v-model="form.username"></el-input>
? ? ? ? ? ? </el-form-item>
? ? ? ? ? ? <el-form-item label="密碼" prop='password'>
? ? ? ? ? ? ? ? <el-input type='password' v-model="form.password"></el-input>
? ? ? ? ? ? </el-form-item>
? ? ? ? ? ? <el-form-item>
? ? ? ? ? ? ? ? <el-button type='primary' @click="login('form')">登錄</el-button>
? ? ? ? ? ? </el-form-item>
? ? ? ? </el-form>
? ? </el-card>
? </div>
</template>

<script>

//登錄驗(yàn)證的封裝
import {nameRule, passRule} from '../utils/validate.js'

import {setToken} from '@/utils/dealtoken.js'

export default {
? data () {
? ? return {
? ? ? ? form: {
? ? ? ? ? ? username: "",
? ? ? ? ? ? password: ""
? ? ? ? },
? ? ? ? rules: {
? ? ? ? ? ? username: [{validator: nameRule, required: true, trigger: "blur"}],
? ? ? ? ? ? password: [{validator: passRule, required: true, trigger: "blur"}]
? ? ? ? }
? ? }
? },
? methods: {
? ? login(form) {
? ? ? ? this.$refs[form].validate((valid) => {
? ? ? ? ? ? if (valid) {
? ? ? ? ? ? ? ? console.log(this.form)
? ? ? ? ? ? ? ? //this.$router.push('/about')
? ? ? ? ? ? ? ? this.axios.post('https://www.baidu.com/', this.form).then(res => {
? ? ? ? ? ? ? ? ? ? console.log(res)
? ? ? ? ? ? ? ? ? ? if (res.data.status === 200) {
? ? ? ? ? ? ? ? ? ? ? ? //localStorage.setItem('username', res.data.username)
? ? ? ? ? ? ? ? ? ? ? ? setToken('username', res.data.username)
? ? ? ? ? ? ? ? ? ? ? ? this.$message({message: res.data.message, type: 'success'})
? ? ? ? ? ? ? ? ? ? ? ? this.$router.push('/home')
? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? })
? ? ? ? ? ? } else {
? ? ? ? ? ? ? ? console.error(this.form)
? ? ? ? ? ? }
? ? ? ? })
? ? }
? }
}
</script>

<style lang='scss'>
? ? .login {
? ? ? ? width: 100%;
? ? ? ? height: 100%;
? ? ? ? position: absolute;
? ? ? ? background: #409EFF;
? ? ? ? .box-card {
? ? ? ? ? ? width: 450px;
? ? ? ? ? ? margin: 200px auto;
? ? ? ? ? ? .el-card_header {
? ? ? ? ? ? ? ? font-size: 34px;
? ? ? ? ? ? }
? ? ? ? ? ? .el-button {
? ? ? ? ? ? ? ? width: 100%;
? ? ? ? ? ? }
? ? ? ? }
? ? }
</style>

src/utils/validate.js

//用戶名匹配
export function nameRule (rule, value, callback) {
? ? let reg = /(^[a-zA-Z0-9]{4,10}$)/;
? ? if (value === "") {
? ? ? ? callback(new Error("請(qǐng)輸入用戶名"));
? ? } else if (!reg.test(value)) {
? ? ? ? callback(new Error("請(qǐng)輸入4-10用戶名"));
? ? } else {
? ? ? ? callback();
? ? }
}

//密碼匹配
export function passRule (rule, value, callback) {
? ? let pass = /^\S*(?=\S{6,12})(?=\S*\d)(?=\S*[A-Z])(?=\S*[a-z])(?=\S*[!@#$%^&*? ])\S*$/;
? ? if (value === "") {
? ? ? ? callback(new Error("請(qǐng)輸入密碼"));
? ? } else if (!pass.test(value)) {
? ? ? ? callback(new Error("請(qǐng)輸入6-12位密碼需要包含大小寫和數(shù)字及特殊字符"));
? ? } else {
? ? ? ? callback();
? ? }
}

src/utils/dealtoken.js

// Token的封裝 Token存放在localStorage
export function setToken(tokenkey, token) {
? ? return localStorage.setItem(tokenkey, token)
}

export function getToken(tokenkey) {
? ? return localStorage.getItem(tokenkey)
}

export function removeToken(tokenkey) {
? ? return localStorage.removeItem(tokenkey)
}

4.運(yùn)行效果

4.1 代碼結(jié)構(gòu)

Vue系列第四篇:Vue2 + Element開發(fā)登錄頁(yè)面,vue.js

Vue系列第四篇:Vue2 + Element開發(fā)登錄頁(yè)面,vue.js

4.2 效果

Vue系列第四篇:Vue2 + Element開發(fā)登錄頁(yè)面,vue.js

5.JS中var let const區(qū)別

1.var
使用關(guān)鍵字 var 聲明的所有變量和函數(shù)都被提升到其作用域的頂部。
(1) var在函數(shù)內(nèi)聲明變量時(shí)。該變量在該函數(shù)之外無(wú)法訪問(wèn),因?yàn)樵谶@種情況下它具有函數(shù)作用域。
(2) var在函數(shù)外聲明變量時(shí),它將具有全局作用域。這意味著它可以在你的代碼中的任何地方訪問(wèn)。
(3) var 的變量是可聲明和可重新分配的。這意味著您可以重新聲明相同的變量并重新分配它,而不會(huì)出現(xiàn)任何問(wèn)題。
例如:
var name = 'zhangsan';
var name = 'lisi';
// 'lisi'
console.log(name)?

2.let & const
ES6 中引入了關(guān)鍵字 let 和 const 作為 var 的替代。
與關(guān)鍵字 var 不同,這兩個(gè)關(guān)鍵字具有塊作用域。這意味著當(dāng)你在塊中聲明它們時(shí),它們只能在該塊 {} 內(nèi)訪問(wèn)。
使用 let 和 const 聲明的變量和函數(shù)不會(huì)被提升。
用關(guān)鍵字let聲明的變量是可重新分配的,而不是可重新聲明的。雖然使用關(guān)鍵字const聲明的變量不可重新分配且不可重新聲明。
舉例:
const name = "zhangsan";
//Error
const name = lisi;?
let x = 1;
x = 2;
//"zhangsan"
console.log(name);?
// 2
console.log(x);?文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-604668.html

到了這里,關(guān)于Vue系列第四篇:Vue2 + Element開發(fā)登錄頁(yè)面的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • Vue2 +Element-ui實(shí)現(xiàn)前端頁(yè)面

    Vue2 +Element-ui實(shí)現(xiàn)前端頁(yè)面

    以一個(gè)簡(jiǎn)單的前端頁(yè)面為例。主要是利用vue和element-ui實(shí)現(xiàn)。 里面涉及的主要包括:新建vue項(xiàng)目、一行多個(gè)輸入框、頁(yè)面實(shí)現(xiàn)等。 ? ①首先安裝nodejs,這部分在此就不講啦。 ②然后安裝vue-cli: 查看是否安裝成功: 安裝成功之后就輸出vue的版本 ③在cmd窗口新建一個(gè)vue2腳手架

    2024年02月16日
    瀏覽(34)
  • Vue2+element-ui后臺(tái)管理系統(tǒng)(靜態(tài)頁(yè)面)

    Vue2+element-ui后臺(tái)管理系統(tǒng)(靜態(tài)頁(yè)面)

    node:https://nodejs.org/en/ git:https://git-scm.com/ vue:https://v2.cn.vuejs.org/v2/guide/installation.html element-ui:https://element.eleme.cn/#/zh-CN/component/installation 項(xiàng)目所需:https://pan.baidu.com/s/1ua0jp9YCtPH6slE49HDUBw 提取碼:kkkk 在node和vue都調(diào)試、配置好的情況下使用vscode 在終端中輸入命令 npm i -g @vue

    2024年02月06日
    瀏覽(43)
  • vue2引入Element UI組件去創(chuàng)建新頁(yè)面的詳細(xì)步驟

    vue2引入Element UI組件去創(chuàng)建新頁(yè)面的詳細(xì)步驟

    目錄 一、Element UI介紹 Element UI的特點(diǎn): 二、下載配置Element UI (零)創(chuàng)建vue項(xiàng)目 (一)下載Element UI依賴?? (二)全局文件main.js中引入Element UI 三、刪除多余的東西? (一)刪除App.vue多余的? (二)刪除多余的頁(yè)面? (三)刪除router路由多余的? 四、新建vue頁(yè)面 (一)新建

    2024年02月12日
    瀏覽(24)
  • vue2引入Element UI組件去創(chuàng)建新的頁(yè)面的詳細(xì)步驟

    vue2引入Element UI組件去創(chuàng)建新的頁(yè)面的詳細(xì)步驟

    目錄 一、Element UI介紹 Element UI的特點(diǎn): 二、下載配置Element UI (零)創(chuàng)建vue項(xiàng)目 (一)下載Element UI依賴?? (二)全局文件main.js中引入Element UI 三、刪除多余的東西? (一)刪除App.vue多余的? (二)刪除多余的頁(yè)面? (三)刪除router路由多余的? 四、新建vue頁(yè)面 (一)新建

    2024年02月14日
    瀏覽(20)
  • vue2引入Element UI組件去創(chuàng)建新頁(yè)面的詳細(xì)步驟--項(xiàng)目階段2

    vue2引入Element UI組件去創(chuàng)建新頁(yè)面的詳細(xì)步驟--項(xiàng)目階段2

    目錄 一、Element UI介紹 Element UI的特點(diǎn): 二、下載配置Element UI (零)創(chuàng)建vue項(xiàng)目 (一)下載Element UI依賴?? (二)全局文件main.js中引入Element UI 三、刪除多余的東西? (一)刪除App.vue多余的? (二)刪除多余的頁(yè)面? (三)刪除router路由多余的? 四、新建vue頁(yè)面 (一)新建

    2024年02月07日
    瀏覽(26)
  • 若依前后端分離+Vue2+Element UI實(shí)現(xiàn)根據(jù)列數(shù)據(jù)展示不同頁(yè)面的數(shù)據(jù)

    若依前后端分離+Vue2+Element UI實(shí)現(xiàn)根據(jù)列數(shù)據(jù)展示不同頁(yè)面的數(shù)據(jù)

    多個(gè)表格中存在同一字段,并且可通過(guò)該字段查到與之對(duì)應(yīng)的數(shù)據(jù)。舉個(gè)簡(jiǎn)單的例子,比如我有一個(gè)學(xué)生表、一個(gè)老師表、一個(gè)課程表,假設(shè)老師表和學(xué)生表里都有課程ID這一字段,那么我可以在課程表里通過(guò)課程ID來(lái),查找需要上這門課的學(xué)生,以及教這門課的老師,并且在

    2024年01月19日
    瀏覽(26)
  • 干翻Dubbo系列第四篇:Dubbo3第一個(gè)應(yīng)用程序細(xì)節(jié)補(bǔ)充

    干翻Dubbo系列第四篇:Dubbo3第一個(gè)應(yīng)用程序細(xì)節(jié)補(bǔ)充

    1:協(xié)議端口 補(bǔ)充說(shuō)明1: 顯示指定Dubbo服務(wù)啟動(dòng)的端口號(hào):一個(gè)服務(wù)器上起多個(gè)Provider都這樣顯示的指定port端口號(hào)的話,會(huì)造成端口號(hào)沖突。 解決方式:我們可以port設(shè)置為-1,服務(wù)啟動(dòng)時(shí)默認(rèn)采用20880(dubbo協(xié)議默認(rèn)端口),此端口被占用默認(rèn)會(huì)+1,一直到加端口不占用為止。

    2024年02月15日
    瀏覽(26)
  • vue2項(xiàng)目中調(diào)取登錄接口登錄以后獲取個(gè)人信息以后,儲(chǔ)存在哪里,怎么在不同的頁(yè)面展示想要的信息?

    vue2項(xiàng)目中調(diào)取登錄接口登錄以后獲取個(gè)人信息以后,儲(chǔ)存在哪里,怎么在不同的頁(yè)面展示想要的信息?

    在Vue2項(xiàng)目中,可以將個(gè)人信息存儲(chǔ)在Vuex狀態(tài)管理中或者瀏覽器的本地存儲(chǔ)中,具體取決于項(xiàng)目的需求和規(guī)模。 1. Vuex狀態(tài)管理 在Vuex中定義一個(gè)user模塊,用于存儲(chǔ)用戶信息,可以在登錄成功后將用戶信息存儲(chǔ)到該模塊中。 // store/user.js ? ?const state = { ? ? ? ? ?userInfo: \\\'\\\' ?

    2023年04月25日
    瀏覽(21)
  • 【Spring進(jìn)階系列丨第四篇】學(xué)習(xí)Spring中的Bean管理(基于xml配置)

    【Spring進(jìn)階系列丨第四篇】學(xué)習(xí)Spring中的Bean管理(基于xml配置)

    在之前的學(xué)習(xí)中我們知道,容器是一個(gè)空間的概念,一般理解為可盛放物體的地方。在Spring容器通常理解為BeanFactory或者ApplicationContext。我們知道spring的IOC容器能夠幫我們創(chuàng)建對(duì)象,對(duì)象交給spring管理之后我們就不用手動(dòng)去new對(duì)象。 那么Spring是如何管理Bean的呢? 簡(jiǎn)而言之,

    2024年02月05日
    瀏覽(24)
  • 菜鳥級(jí):Vue Element-UI 前端 + Flask 后端 的登錄頁(yè)面驗(yàn)證碼

    菜鳥級(jí):Vue Element-UI 前端 + Flask 后端 的登錄頁(yè)面驗(yàn)證碼

    這里記錄登錄頁(yè)面驗(yàn)證碼的做法,采取的是前后端分離的做法,前端用Vue,后端用Flask 首先是GIF效果圖: 后端返回的數(shù)據(jù)結(jié)構(gòu)(base64字符串,response.data.img): ? 1、Vue前端頁(yè)面基本采用Ruoyi Ui里面的登錄頁(yè)面代碼,里面的一些方法進(jìn)行重寫; 首先是單個(gè)vue文件里網(wǎng)頁(yè)內(nèi)容

    2023年04月08日
    瀏覽(36)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包