第九篇:复习Vue脚手架(含班级管理系统页面案例)

文章目录

  • 一、前端工程化
    • 1. 环境准备
      • 1.1 Vue-cli
    • 2. Vue项目简介
      • 2.1 Vue项目-创建
      • 2.2 Vue目录结构
      • 2.3 Vue项目-启动
      • 2.4 Vue项目-配置端口
      • 2.5 Vue项目-页面入口
      • 2.6 Vue-组件文件
  • 二、Vue组件库Element
    • 1. 什么是Element
    • 2. 快速入门
    • 3. 常见组件
      • 3.1 table 表格
      • 3.2 pagination 分页
      • 3.3 dialog 对话框
      • 3.4 form 表单
  • 三、Vue路由
    • 1. Vue Router
    • 2. 安装
    • 3. 定义路由
  • 四、案例
    • 4. 案例
  • 五、打包部署
    • 1. 打包
    • 2. 部署
      • 2.1 Nginx
      • 2.2 部署
      • 2.3 修改端口号
  • 六、小结

一、前端工程化

前端工程化:指的是在企业级的前端项目开发中,把前端开发所需的工具,技术,流程,经验等进行规范化,标准化。

  • 模块化 (JS,CSS)
  • 组件化 (UI结构,样式,行为)
  • 规范化 (目录结构,编码,接口)
  • 自动化 (构建,部署,测试)

1. 环境准备

1.1 Vue-cli

Vue-cli是Vue官方提供的一个脚手架,用于快速生成一个Vue的项目模板。
Vue-cli提供了如下功能:

  • 统一的目录结构
  • 本地调试
  • 热部署
  • 单元测试
  • 集成打包上线

依赖环境:NodeJS
NodeJS官方下载地址:https://nodejs.org/en
安装部署详情可看(超详细):https://blog.csdn.net/WHF__/article/details/129362462

2. Vue项目简介

2.1 Vue项目-创建

  • 命令行:vue create vue-project01
  • 图形化界面:vue ui

首先创建一个文件夹
在这里插入图片描述
在这个框内输入cmd
在这里插入图片描述
打开图形化界面之后,便可以开始创建Vue项目
在这里插入图片描述

2.2 Vue目录结构

创建完成之后,在VsCode中打开
基于Vue脚手架创建出来的工程,有标准的目录结构,如下:
在这里插入图片描述

其中五个需要介绍:

  • node_modules :整个项目的依赖包

  • public:存放着静态文件

  • src 存放项目的源代码
    在这里插入图片描述

    • assets:静态资源
    • components:可重复用的组件
    • router:路由配置
    • views:视图组件(页面)
    • App.vue(页面入口-根组件)
    • main.js(入口-JS文件)
  • package.json:模块基本信息,项目开发所需的模块,版本信息

  • vue.config.js:保存vue配置的文件,如:代理,端口的配置

2.3 Vue项目-启动

第一种方法,在可视化工具中,点击在NPM脚本中的server右边的运行即可:
在这里插入图片描述
第二种方法,在命令行内输入npm run serve
在这里插入图片描述

2.4 Vue项目-配置端口

因为默认的端口号8080很容易被占用或者重复,所以需要手动的修改一下端口号

在vue.config.js中,添加一条配置即可:

2.5 Vue项目-页面入口

默认首页的HTML在 index.html中
在这里插入图片描述
项目入口文件在 main.js中
在这里插入图片描述‘其中.$mount("#app")挂载的区域指的就是index.html中的app区域

2.6 Vue-组件文件

Vue的组件文件以.vue结尾,每个组件由三部分组成:
<template>,<script><style>.

  • <template>是模块部分,可定义原生的HTML代码的
  • <script>控制模板数据来源和行为‘
  • <style>控制css样式

二、Vue组件库Element

1. 什么是Element

element 是基于 vue 实现的一套不依赖业务的 UI 组件库,提供了丰富的PC端组件,减少用户对常用组件的封装,降低了开发的难易程度。Element-Ui是基于vue封装的组件库,简化了常用组件的封装,提高了重用性原则,提高了重用性原则;
组件:组成网页的部分,例如:超链接,按钮,图片,表格,表单,分页等等…
官网跳转:https://element-plus.org/zh-CN/#/zh-CN

左边是原始HTML代码生成的按钮和表单,右边则是使用Element生成的效果,这就是为什么要使用Element组件的原因
在这里插入图片描述

2. 快速入门

安装ElementUI组件库

在当前工程目录下,在命令行执行指令:

npm install element-ui@2.15.3

引入ElementUI组件库

import ElementUI from 'element-ui';
import 'element-ui/lib/theme-chalk/index.css'

在这里插入图片描述

访问官网,复制组件代码,进行调整

如果想要使用那个Vue页面
在app.vue中调用例如:

import ElementView from './views/element/ElementView.vue';
export default {
	  components:{ 
	        ElementView
	  },
	  data(){
	    return{
	
		}
	  },
	
	  methods: {
	  
	  },
}

3. 常见组件

3.1 table 表格

Table 表格:用于展示多条结构类似的数据,可对数据进行排序,筛选,对比和其他自定义操作
例如:

3.2 pagination 分页

pagination 分页:分页就是用请求从后台把所有的数据拿下来,然后进行分页,如果当数据足够大时,网页就会加载的很慢,唯一的好处就是只需要向后台请求一次就可以了。

3.3 dialog 对话框

dialog 对话框:对话框(又称对话方块)是一种特殊的视窗, 用来在用户界面中向用户显示信息,或者在需要的时候获得用户的输入响应。

3.4 form 表单

form 表单:表单在网页中主要负责数据采集功能。一个表单有三个基本组成部分: 表单标签:这里面包含了处理表单数据所用CGI程序的URL以及数据提交到服务器的方法。 表单域:包含了文本框、密码框、隐藏域、多行文本框、复选框、单选框、下拉选择框和文件上传框等。 表单按钮:包括提交按钮、复位按钮和一般按钮;

以上组件举一个简单例子如下:

<template>
  <div>
    <el-row>
      <!-- 按钮的使用 -->
      <el-button>默认按钮</el-button>
      <el-button type="primary"> 主要按钮 </el-button>
      <el-button type="success">成功按钮</el-button>
      <el-button type="info">信息按钮</el-button>
      <el-button type="waring">警告按钮</el-button>
      <el-button type="danger">危险按钮</el-button>
    </el-row>
    <!-- el-table :data="要展示的是什么数据" 控制表格 -->
    <!-- prop 对象里面的什么属性 -->
    <template>
      <!-- 表格表单的使用 -->
      <el-table :data="tableData" style="width: 100%">
        <el-table-column prop="date" label="日期" width="180">
        </el-table-column>
        <el-table-column prop="name" label="姓名" width="180">
        </el-table-column>
        <el-table-column prop="address" label="地址"> </el-table-column>
      </el-table>
    </template>

    <template>
      <!-- 分页的使用 -->
      <el-pagination background layout="total,sizes,prev, pager, next,jumper" :total="1000"
        @size-change="handleSizeChange" @current-change="handleCurrentChange">
      </el-pagination><br><br>
    </template>

    <!-- 外层点击按钮 -->
    <el-button type="primary" @click="dialogTableVisible = true">打开嵌套表格的 Dialog</el-button>
    <!-- 点击后进入内层对话窗 -->
    <el-dialog title="收货地址" :visible.sync="dialogTableVisible">
      <el-table :data="gridData">
        <el-table-column property="date" label="日期" width="150"></el-table-column>
        <el-table-column property="name" label="姓名" width="200"></el-table-column>
        <el-table-column property="address" label="地址"></el-table-column>
      </el-table>
    </el-dialog><br><br>

    <!-- 对话框——form表单  -->
    <el-button type="primary" @click="dialogFormVisible = true">打开嵌套Form的 Dialog</el-button>
    <el-dialog title="Form表单" :visible.sync="dialogFormVisible">
      <el-form ref="form" :model="form" label-width="80px">
        <el-form-item label="活动名称">
        <el-input v-model="form.name"></el-input>
      </el-form-item>

      <el-form-item label="活动区域">
        <el-select v-model="form.region" placeholder="请选择活动区域">
          <el-option label="区域一" value="shanghai"></el-option>
          <el-option label="区域二" value="beijing"></el-option>
        </el-select>
      </el-form-item>

      <el-form-item label="活动时间">
        <el-col :span="11">
          <el-date-picker type="date" placeholder="选择日期" v-model="form.date1" style="width: 100%;"></el-date-picker>
        </el-col>
        <el-col class="line" :span="2">-</el-col>
        <el-col :span="11">
          <el-time-picker placeholder="选择时间" v-model="form.date2" style="width: 100%;"></el-time-picker>
        </el-col>
      </el-form-item>

      <el-form-item>
        <el-button type="primary" @click="onSubmit">立即创建</el-button>
        <el-button>取消</el-button>
      </el-form-item>
</el-form>

       
    </el-dialog>

  </div>
</template>

<script>
export default {
  data() {
    return {
      form: {
          name: '',
          region: '',
          date1: '',
          date2: '',
        },
      //  对话框里的数据
      gridData: [{
        date: '2016-05-02',
        name: '王小虎',
        address: '上海市普陀区金沙江路 1518 弄'
      }, {
        date: '2016-05-04',
        name: '王小虎',
        address: '上海市普陀区金沙江路 1518 弄'
      }, {
        date: '2016-05-01',
        name: '王小虎',
        address: '上海市普陀区金沙江路 1518 弄'
      }, {
        date: '2016-05-03',
        name: '王小虎',
        address: '上海市普陀区金沙江路 1518 弄'
      }],
      dialogTableVisible: false,
      dialogFormVisible: false,
      // 表格里的数据
      tableData: [
        {
          date: "2016-05-02",
          name: "王小虎",
          address: "上海市普陀区金沙江路 1518 弄",
        }, {
          date: "2016-05-04",
          name: "王小虎",
          address: "上海市普陀区金沙江路 1517 弄",
        }, {
          date: "2016-05-01",
          name: "王小虎",
          address: "上海市普陀区金沙江路 1519 弄",
        }, {
          date: "2016-05-03",
          name: "王小虎",
          address: "上海市普陀区金沙江路 1516 弄",
        },
      ],
    };
  },
  methods: {
    handleSizeChange: function (val) {
      alert("每页记录变化" + val)
    },
    handleCurrentChange: function (val) {
      alert("页码发生变化" + val)
    },
    onSubmit() {
        alert(JSON.stringify(this.form));
      }
  },

};
</script>

详细效果如下:
在这里插入图片描述
切换页面效果如下:
在这里插入图片描述
表单效果如下:
在这里插入图片描述
在这里插入图片描述

三、Vue路由

前端路由:URL中的hash(#号)与组件之间的对应关系

1. Vue Router

Vue Router是Vue的官方路由
组成:

  • Vue Router:路由器类,根据路由请求在路由视图中国动态渲染选中的组件
  • <roter-link>:请求链接组件,浏览器会解析成<a>
  • <royter-view>:动态视图组件,用来渲染展示与路由路径对应的组件

三者之间的关联如图所示:
在这里插入图片描述

2. 安装

创建Vue项目时可以勾选
npm install vue-router$3.5.1

3. 定义路由

在router下index.js内定义:
在这里插入图片描述
当/后面符合某种url,便会展示处对应的页面:
在这里插入图片描述

四、案例

4. 案例

根据页面原型,完成班级学生系统管理页面开发,并通过Axios完成数据异步加载:

    1. 创建页面
    1. 布局各个部分的组件实现
    1. 列表数据的异步加载,并渲染展示

详细代码如下展示:

<template>
    <div>
        <el-container style="height: 700px; border: 1px solid #eee">
            <el-header style="font-size : 40px;background-color: rgb(238, 241, 246)">大数据二班学生管理系统</el-header>
            <el-container>
                <el-aside width="200px" style="border: 1px solid #eee">
                    <el-menu :default-openeds="['1', '3']">
                        <el-submenu index="1">
                            <template slot="title"><i class="el-icon-message"></i>导航一</template>
                            <el-menu-item-group>
                                <template slot="title">基本信息管理</template>
                                <el-menu-item index="1-1">
                                    教师基本信息
                                </el-menu-item>
                                <el-menu-item index="1-2">
                                   学生基本信息
                                </el-menu-item>
                            </el-menu-item-group>
                        </el-submenu>
                    </el-menu>
                </el-aside>


                <el-main>
                    <el-form :inline="true" :model="searchForm" class="demo-form-inline">
                        <el-form-item label="姓名">
                            <el-input v-model="searchForm.name" placeholder="姓名"></el-input>
                        </el-form-item>

                        <el-form-item label="性别">
                            <el-select v-model="searchForm.gender" placeholder="性别">
                                <el-option label="" value="1"></el-option>
                                <el-option label="" value="2"></el-option>
                            </el-select>
                        </el-form-item>

                        <el-form-item label="入学日期">
                            <el-date-picker v-model="searchForm.staTime" type="daterange" range-separator=""
                                start-placeholder="开始日期" end-placeholder="结束日期">
                            </el-date-picker>
                        </el-form-item>

                        <el-form-item>
                            <el-button type="primary" @click="onSubmit">查询</el-button>
                        </el-form-item>
                    </el-form>


                    <el-table :data="tableData" border>
                        <el-table-column prop="id" label="id" width="120">
                        </el-table-column>
                        <el-table-column prop="stuId" label="学号" width="120">
                        </el-table-column>
                        <el-table-column prop="name" label="姓名" width="120">
                        </el-table-column>
                        <el-table-column label="性别" width="120">
                            <template slot-scope="scope">
                                {{scope.row.gender == 1 ?'男':'女'}}
                                    
                                
                            </template>
                        </el-table-column>
                        <el-table-column prop="phone" label="手机号" width="130">
                        </el-table-column>
                        <el-table-column prop="addres" label="住址" width="120">
                        </el-table-column>
                        <el-table-column prop="staTime" label="入学时间" width="140">
                        </el-table-column>
                        <el-table-column prop="operate" label="操作" width="180">
                            <template slot-scope="scope">
                                <el-button @click="handleClick(scope.row)" type="primary" size="small">编辑</el-button>
                                <el-button type="danger" size="small">删除</el-button>
                            </template>
                        </el-table-column>

                    </el-table>

                    <el-pagination background layout="total,sizes,prev, pager, next,jumper" :total="1000"
                        @size-change="handleSizeChange" @current-change="handleCurrentChange">
                    </el-pagination><br><br>


                </el-main>
            </el-container>
        </el-container>
    </div>
</template>

<script>
import axios from 'axios';
export default {
    data() {
        return {
            tableData: [],
            searchForm: {
                name: '',
                gender: '',
                staTime: []
            }
        }
    },
    methods: {
        handleClick(row) {
            console.log(row);
        },
        handleSizeChange: function (val) {
            alert("每页记录变化" + val)
        },
        handleCurrentChange: function (val) {
            alert("页码发生变化" + val)
        },
        onSubmit() {
            alert("查询结果")
        },

    },
    mounted() {
        axios.get("https://yapi.pro/mock/166153/user/id").then((result) => {
            this.tableData = result.data.data;
        })
    }
}
</script>

<style></style>

数据如下:
在这里插入图片描述
执行效果如下:
在这里插入图片描述

五、打包部署

1. 打包

点击下面第二个build右边的三角即可:
在这里插入图片描述
然后会在目录中,出现一个dist目录,在右键然后磁盘中打开

这就是打包后的文件:
在这里插入图片描述

2. 部署

2.1 Nginx

Nginx是一一款轻量级的Web服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器。特点是占有内存少,并发能力强,在各大型互联网公司都有非常广泛的应用。
官网:https://nginx.org/

直接在官网下载到一个没有中文,不含空格的文件夹下
在这里插入图片描述

  • conf:配置文件目录
  • html:静态资源文件目录
  • logs:日志文件目录
  • temp:临时文件目录

2.2 部署

将打包好的dist目录下的文件,复制到nginx安装目录的html目录下
直接Ctrl C + Ctrl V 粘贴就行

然后运行nginx.exe可执行文件,会报错,在logs内查看,因为nginx默认端口号为80,端口号会被占用,所以需要手动的修改一下端口号

2.3 修改端口号

在conf文件下寻找nginx.conf配置文件,双击点开就行,然后寻找36行的默认端口号80的配置
把它改成90:
在这里插入图片描述

然后打开浏览器,访问localhost:90就可以在浏览器正常访问到

六、小结

写本文主要是为了分享我的学习过程,也是给自己记个笔记,哪里忘记了,回来再看一眼,也可以很快的回想起来

  • 5
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值