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 展示路径对应的组件

    <template>
    <router-view/>
    </template>

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,
})
相关推荐
90后的晨仔17 分钟前
在macOS上无缝整合:为Claude Code配置魔搭社区免费API完全指南
前端
沿着路走到底1 小时前
JS事件循环
java·前端·javascript
子春一21 小时前
Flutter 2025 可访问性(Accessibility)工程体系:从合规达标到包容设计,打造人人可用的数字产品
前端·javascript·flutter
白兰地空瓶1 小时前
别再只会调 API 了!LangChain.js 才是前端 AI 工程化的真正起点
前端·langchain
jlspcsdn2 小时前
20251222项目练习
前端·javascript·html
行走的陀螺仪3 小时前
Sass 详细指南
前端·css·rust·sass
爱吃土豆的马铃薯ㅤㅤㅤㅤㅤㅤㅤㅤㅤ3 小时前
React 怎么区分导入的是组件还是函数,或者是对象
前端·react.js·前端框架
LYFlied3 小时前
【每日算法】LeetCode 136. 只出现一次的数字
前端·算法·leetcode·面试·职场和发展
子春一23 小时前
Flutter 2025 国际化与本地化工程体系:从多语言支持到文化适配,打造真正全球化的应用
前端·flutter
QT 小鲜肉3 小时前
【Linux命令大全】001.文件管理之file命令(实操篇)
linux·运维·前端·网络·chrome·笔记