每天进步一点点---------畅购商城第二天 前台框架搭建

本文介绍了使用Vue、ElementUI和Axios搭建前端项目的详细过程,包括项目目录创建、ElementUI和Axios的引入及验证。通过官方文档学习,配合相关视频教程辅助理解。文中还分享了在项目验证阶段遇到的问题与解决方案,如样式生效、模板编写、数据校验和API调用等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

使用前后端分离开发,涉及Vue+ElementUI+Axios,做为专业白嫖党和完全的小白,必然边学边练,首先来一把学习资料:
最重要和最关键的学习资料,必然是官网了:
Vue官网
ElemetnUI官网
Axios官网
官网如果有不懂的可以在下面的课程中查漏补缺,codewhy的视频有项目结构和规范的部分内容
【编程不良人】适合后端编程人员的 ElementUI教程,结合SpringBoot项目案例,已完结!!!
最全最新Vue、Vuejs教程,从入门到精通

项目搭建与目录

参考codeWhy的课程,项目创建过程和目录设置如下:
(1)创建项目

vue init webpack webPro
? Project name web
? Project description test
? Author XXX
? Vue build standalone
? Install vue-router? Yes
? Use ESLint to lint your code? Yes
? Pick an ESLint preset Standard
? Set up unit tests Yes
? Pick a test runner jest
? Setup e2e tests with Nightwatch? No
? Should we run `npm install` for you after the project has been created? (recommended) npm

(2)创建工程目录
先创建目录结构,不做任何操作,

src下的目录为
	assets   //图片等资源
		css
		img
	components  // 组件
		common   //公共组件
		content
	network    // 前后端交互
		utils
		
	router     // 路由
	store     // 
	view   //页面

(3)引入ElementUI
参考自ElementUI官网->安装和快速上手章节,务必需要引入element-ui的index.css,否则样式将无法生效。

npm i element-ui -S
在main.js中引入下面的内容
import ElementUI from 'element-ui';
import 'element-ui/lib/theme-chalk/index.css';
import App from './App.vue';

Vue.use(ElementUI);

(4)引入Axios和基本包

npm install axios --save-dev

Vue封装Axios,参考自coderWhy和一个大神的封装过程
在/network/utils目录下创建http.js和request.js,具体代码可以查看大神的博客。

基本验证

后台已经搭建goods服务,实现了brand的增删改查,使用brand的查和增做一个简单验证,验证样式为ElementUI表格和表单
在这里插入图片描述
brands.vue创建如下,代码还是十分的ugly,后序优化。

<template>
  <div class="brands">
    <el-button type="primary" icon="el-icon-search" @click="getAllbrands">查询</el-button>
    <el-table
      :data="brandsList"
      style="width: 100%"
      align="center"
      highlight-current-row
      :row-class-name="tableRowClassName">
      <el-table-column type="selected" width="55"></el-table-column>
      <el-table-column
        prop="image"
        label="商标"
        width="180">
      </el-table-column>
      <el-table-column
        prop="name"
        label="品牌"
        width="180">
      </el-table-column>
      <el-table-column
        prop="letter"
        label="首字母"
        width="180">
      </el-table-column>
      <el-table-column
        prop="seq"
        label="排序"
        width="180">
      </el-table-column>
      <el-table-column
        prop="operation"
        label="操作"
        width="300">
        <template slot-scope="scope">  
          <el-button type="info" icon="el-icon-delete" @click="deleteUser(scope.row.phone)"></el-button>
        </template>
      </el-table-column>
    </el-table>

    <el-form ref="brandForm" :model="brandForm" label-width="80px">
      <el-form-item label="品牌名称">
        <el-input v-model="brandForm.name"></el-input>
      </el-form-item>
      <el-form-item label="品牌图片">
        <el-input v-model="brandForm.img"></el-input>
      </el-form-item>
      <el-form-item label="首字母">
        <el-input v-model="brandForm.letter"></el-input>
      </el-form-item>
      <el-form-item label="品牌排序">
        <el-input v-model="brandForm.seq"></el-input>
      </el-form-item>
      <el-form-item>
        <el-button type="primary" @click="addBrands(brandForm)">立即创建</el-button>
      </el-form-item>
    </el-form>
  </div>
</template>

<style>
  .el-table .warning-row {
    background: oldlace;
  }

  .el-table .success-row {
    background: #f0f9eb;
  }
</style>

<script>
  import {getGoodsListAllAPI,addBrandAPI} from '@/network/goods'

  export default {
    name: "goods",
    methods: {
      tableRowClassName({row, rowIndex}) {
        if (rowIndex === 1) {
          return 'warning-row';
        } else if (rowIndex === 3) {
          return 'success-row';
        }
        return '';
      },
      getAllbrands() {
        getGoodsListAllAPI().then(res => {
          let brands = []
          if (res.status == "200") {
            brands = res.data.data;
            console.log(brands)
          }
          this.brandsList = brands;
          console.log(this.brandsList)
        }).catch(
          err => console.log(err)
        )
      },
      addBrands(brandForm){
        console.log(brandForm)
        addBrandAPI(brandForm).then(res => console.log(res)).catch(e => console.log(e));
      }
    },
    data() {
      return {
        brandsList: [],
        brandForm:{
          name:'',
          img:'',
          letter:'',
          seq:''
        }
      }
    }
  }
</script>

部署验证

执行npm run build,会在dist目录多出前台的静态文件,在linux虚拟机中安装nginx

wget http://nginx.org/download/nginx-1.13.7.tar.gz
 tar -xvf nginx-1.13.7.tar.gz
 ./configure
 make
 make install
 whereis nginx  // 查看nginx的安装目录

nginx安装完成后,远程查看网址如下:
在这里插入图片描述
将静态文件放入到html目录,重新启动nginx后,查看页面如下:
在这里插入图片描述
验证后,发现可以生效。

FAQ

(1)未引入ElementUI的index.css样式,造成ElementUI部分组件不正确,样式不正确
(2)新建vue中template中必须加div,否则多个标签时会报需要同一个根的错误
(3)ElementUI的model属性为数据对象,还未使用rules进行校验
在这里插入图片描述
(4)Axios已经配置了BaseURL和timeout,可以直接使用,遇到postMan可以调通,但是遇到token验证,无法调通的情况,因此request.js先去掉token部分

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值