Vue2 + ElementUI + axios + VueRouter入门

之前没有pc端开发基础,工作需要使用若依框架进行了一年的前端开发.最近看到一个视频框架一步步集成,感觉颇受启发,在此记录一下学习心得。视频链接:vue2+element ui 快速入门

环境搭建和依赖安装

  1. 安装nodejs
  2. 安装Vue Cli
  3. 使用vue create project 创建vue2工程
  4. 修改C:\Users\guchu.vuerc packageManager 为 npm
  5. 使用npm install axios 安装网络请求框架
  6. npm install vue-router@3(注意:vue2 对应 vue-router@3, vue3对应vue-router@4)
  7. npm i element-ui -S 安装elementUI框架

开发过程

静态登录页面开发

1. 将elementui注入Vue

修改main.js 添加一下内容:

复制代码
import ElementUi from 'element-ui'
import 'element-ui/lib/theme-chalk/index.css'; 
Vue.use(ElementUi) 

2. 编写静态页面:

新增src/pages/login/index.vue文件

复制代码
<template>
  <div class="login">
    <el-form label-width="80px" ref="formRef" :model="form" :rules="rules">

      <el-form-item label="用户名" prop="username">
        <el-input v-model="form.username" placeholder="请输入用户名"/>
      </el-form-item>

      <el-form-item label="密码" prop="password">
        <el-input v-model="form.password" placeholder="请输入密码" type="password"/>
      </el-form-item>
      <el-form-item>
        <el-button type="primary" @click="login">登录</el-button>
      </el-form-item>

    </el-form>
  </div>
</template>
<script>
export default {
  name: 'Login',
  data() {
    return {
      form: {
        username: '',
        password: ''
      },
      rules: {
        username: [
          {required: true, message: '用户名不能为空', trigger: 'blur'}
        ],
        password: [
          {required: true, message: '密码不能为空', trigger: 'blur'}
        ]
      }
    }
  },
  methods: {
    login() {
      this.$refs.formRef.validate(valid => {
        if (valid) {
          this.$message({type: 'success', message: '验证通过'})
        } else {
          this.$message({type: 'error', message: '验证失败'})
        }
      })
    }
  }
}
</script>
<style scoped>
.login {
  position: absolute;
  width: 500px;
  height: 500px;
  top: 50%;
  left: 50%;
  transform: translate(-50%, -50%);
}

</style>

知识点说明:

  1. 元素居中

    .login {
    position: absolute;
    width: 500px;
    height: 500px;
    top: 50%;
    left: 50%;
    transform: translate(-50%, -50%);
    }

top\left从中心点开始布局,然后向左上角移动50%。

  1. 表单和数据的双向绑定:model = form

  2. 指定表单验证规则 :rules="rules" prop具体校验字段 this.$refs.formRef.validate进行所有字段校验。

3.路由设置

  1. 新建src/router/index.js

    import Vue from 'vue'
    import VueRouter from "vue-router"
    import Login from '../pages/login'

    Vue.use(VueRouter)
    const routes = [{
    path: "/login",
    component: Login
    }]
    const router = new VueRouter({
    routes,
    mode: 'hash'
    })
    export default router;

  2. main.js进行挂载

    import router from './router';
    new Vue({
    router,
    render: h => h(App),
    }).$mount('#app')

  3. 添加router-view 展示路径对应的组件

http://localhost:8080/#/login

添加网络请求

  1. 拦截网络请求,添加校验头
    新建src/utils/request.js

    import axios from 'axios'

    const request = axios.create({
    timeout: 5000
    })
    request.interceptors.request.use(
    config => {
    const token = localStorage.getItem('token')
    if (token) {
    config.headers["authorization"] = token;
    }
    return config;
    }
    )
    export default request;

  2. 创建login具体网络请求
    新建src/api/login.js

    import request from "@/utils/request";

    const login = (admin) => {
    return request({
    url: '/dev-api/auth/login',
    method: 'post',
    data: admin
    })
    }
    export default {
    login
    };

  3. vue.config.js 设置代理地址

    const {defineConfig} = require('@vue/cli-service')
    module.exports = defineConfig({
    lintOnSave: false,
    transpileDependencies: true,
    devServer: {
    proxy: {
    '/dev-api': {
    target: http://localhost:28080,
    changeOrigin: true,
    pathRewrite: {
    ['^' + process.env.VUE_APP_BASE_API]: '/dev-api'
    }
    }
    },

    复制代码
     }

    })

  4. 对网络接口进行集中管理
    新增 src/api/index.js

    import login from './login'

    export default {
    login,
    }

  5. 将api挂在Vue简化import

    import api from './api';
    Vue.prototype.$api = api;

  6. login页面进行调用

    复制代码
           this.$api.login.login(this.form).then(response => {
             const {code, msg, data} = response.data;
             if (200 === code) {
               this.$message({
                 type: 'success',
                 message: '登录成功'
               })
               localStorage.setItem('token', data.access_token);
               this.$router.push("/")
             } else {
               this.$message({type: 'error', message: msg})
             }
           })

其他

  1. 编译运行ESLint 报错
    /.eslintrc.js 添加一下内容(没有进行新建)

    module.exports = {
    rules: {
    "*": "off"
    },
    };

/vue.config.js 添加 lintOnSave:false

复制代码
const {defineConfig} = require('@vue/cli-service')
module.exports = defineConfig({
    transpileDependencies: true,
    lintOnSave: false,
})
相关推荐
brien920 分钟前
为什么模型标称 1M,Google Antigravity 聊到 256K 却突然失忆?我们给它做了个原生行内监控圆环
前端
修炼的dance35 分钟前
录屏关键帧间隔多少合适?六档实测,2秒到10秒小了75.6%
前端
Lank_M42 分钟前
关键帧从1秒拉到10秒,录屏小87.3%,摄像头小10.8%
前端
补码缩写44 分钟前
用 ffprobe 拆录屏,八成字节在 29 个关键帧上
前端
百思不得小李1 小时前
一个复杂的动态表单是如何实现的
前端·设计模式
陈随易1 小时前
Cmder 停更 17 个月,2.0 支持 Windows Terminal
前端·后端·程序员
清晨Coding1 小时前
删了 Cookie 还能自动登录?Google系网站登录态自动恢复的原理分析
javascript
风骏时光牛马1 小时前
前沿视界
前端
kyriewen1 小时前
我扫了 814 个依赖,97 个还敢要 Node 10
前端·javascript·程序员
陈随易2 小时前
3000 万人在用的翻译插件,重写一遍就是一门生意
前端·后端·程序员