从原生Vue到Element的学习

Ajax--用于异步调用JavaScript与HTML

Ajax仅当了解

作用:

  1.  对服务器进行收发数据。
  2. 在不刷新页面的前提下,实现【1】、并能使得部分的页面更新(热更新)。

同步与异步的区分:

        同步:浏览器发送请求到服务器时,服务器发送响应信息需要时间,这时候的浏览器只能干等,不能进行操作。

        异步:浏览器发送请求到服务器时,服务器发送响应信息需要的时间被利用起来,可以在浏览器中进行操作。

现今大环境对Ajax的使用情况:基本不用。被下面要介绍的Axios所代替。

Axios--用于异步调用JavaScript与HTML

地位:是Ajax的替代品。现在多数企业使用该技术来完成项目的制作。

来由:两者底层实现差不多,但Axios的调用比Ajax方便。

使用:其使用放到下面实际开发时讲,使用过程并不复杂。

前后端分离的历史与使用的技术

早期开发模式: 

早期的开发模式中,前后端混合在一起开发,开发人员要开发一个项目,他既需要使用前端的技术站来开发前端的功能,又需要使用Java的技术栈来编写后端的功能实现,还需要操作。

这时候前后端的代码都写在一个工程中。这种开发模式要求后端开发人员既需要熟悉前端开发的技术栈,也需要熟悉服务器端开发的技术栈。

主要会存在以下几个问题:

  1. 沟通成本高
  2. 分工不明确
  3. 项目不便于管理
  4. 项目不便于维护与拓展

主流的开发模式:

前后端分离。我们会讲一个项目拆成两个部分,一个为前端工程,一个为后端工程。前后端有各自不同的开发人员进行开发。最后开发好的前后端程序进行交互。

接口文档:

在前后端分离的开发模式当中,前端程序和后端程序都是由独立的团队进行开发的。前后端程序要想最终能够正常的交互对接起来,他们在进行开发的时候,就必须要遵守某种开发规范,这个规范是定义在文档中的,这个文档就叫做接口文档。这里的接口指的是一个业务功能。

文档里面会描述一些详细信息,比如接口的请求路径,请求方式,接口的基本描述信息等。

在描述信息下面会有一个接口响应数据。即,向服务器发送请求,服务器给我返回来的数据,这个数据一般是json格式。

如果前后端开发工程师都严格遵循同一份接口文档,最终开发的前后端工程是可以无缝集成在一起的。

接口文档的维护:

维护分为在线和离线,在线就是通过一些接口文档管理平台进行维护,离线就是用markdown、Excel等软件写这个文档。

谁写? 产品经理

怎么写? 通过页面原型以及需求文档分析得来

Elink Apikit接口文档维护平台

在本章中,我将使用这个平台来对前端进行数据测试。

下面是操作演示截图:

前端环境搭建

一个大型的项目,如果每一次开发一个功能都是从零开始,将需要投入大量的时间和精力,但是这样的投入是不太值得的。故在现在的前端开发当中,都讲究前端开发的模块化、组件化、规范化和自动化。

使用前端工程化后,我们会使用一些工具来提高工作效率,降低工作时间。

需要用到的环境:

  1. vue的脚手架 -- 用于快速生成一个工程化的项目模板,我们就在这个模板上进行开发。
  2. node.js  vue的脚手架的运行需要这个环境 推荐安装16.17.1
  3. vue.cla

Vue项目

创建项目脚手架:

命令行: 输入vue ui,进入浏览器,按下面进行操作

当命令行最后一行看到有project created,项目就创建完成了。

vue的目录结构:

下面就开始让vue第一次跑起来。跑起来的方式有两种,一种是npm的脚本,

按一下就能开始启动。

vue文件的内部代码结构解释:

vue项目的开发流程:

修改vue的项目端口:

在vue.config.js中,加入

安装ElementUI

现在真正的开发大多不会使用原生开发,而是使用ElementUI。故我们的学习重点会放在ElementUI上。推荐版本号与图片的一样。

安装步骤:

下面这三行可以去官网复制。

Element入门

Element是饿了么外卖平台团队研发的。等一下写完就点份外卖,饿死我了。

首先它是基于Vue框架的,是一套组件。什么是组件呢?

组件就是组成网页的各个部件,比如超链接,图片,按钮等。

就比如。原生的button比较原生,而Element的Button直接拿来用就已经比较好看了。

项目:卡特琳娜员工管理系统

效果图:

DeptVue模块的代码:
<template>
<el-container style="height: 900px; border: 1px solid #eee">
    <el-header style="font-size: 40px; background-color: rgb(238, 241, 246)">Katarina员工系统</el-header>
    <el-container>
        <el-aside width="210px" 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 index="1-1">
                        <router-link to="/emp">员工管理</router-link>
                    </el-menu-item>
                    <el-menu-item index="1-2">
                        <router-link to="/dept">部门管理</router-link>
                    </el-menu-item>

                </el-submenu>
            </el-menu>
        </el-aside>
        <el-main>
            <el-table :data="deptData" border style="width: 100%">
                <el-table-column fixed prop="name" label="名称" width="150"></el-table-column>
                <el-table-column fixed prop="updatetime" label="最后操作时间" width="280"></el-table-column>
                <el-table-column  label="操作" width="700">
                    <el-button type="primary" size="small">编辑</el-button>
                    <el-button type="danger" size="small">删除</el-button>
                </el-table-column>
            </el-table>
        </el-main>
    </el-container>
</el-container>
</template>

<script>
import axios from 'axios'
export default {
    components: {},
    data() {
        return {
            deptData: []
        }
    },
    mounted() {
        axios.get("https://result.eolink.com/zYisy7Y6950de7e106fe3806aa8351852f3b8ea5355e118?uri=/dept/getDeptInfo").then(res => {
            this.deptData = res.data.data;
        })
    },
    methods: {},
}
</script>

<style>

</style>
ElpVue模块代码:
<template>
<div>
    <el-container style="height: 900px; border: 1px solid #eee">
        <el-header style="font-size: 40px; background-color: rgb(238, 241, 246)">Katarina员工系统</el-header>
        <el-container>
            <el-aside width="210px" 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 index="1-1">
                            <router-link to="/emp">员工管理</router-link>
                        </el-menu-item>
                        <el-menu-item index="1-2">
                            <router-link to="/dept">部门管理</router-link>
                        </el-menu-item>

                    </el-submenu>
                </el-menu>
            </el-aside>
            <el-main>
                <!-- form -->
                <el-form :inline="true" :model="serachForm" class="demo-form-inline">
                    <el-form-item label="姓名">
                        <el-input v-model="serachForm.name" placeholder="请输入员工姓名"></el-input>
                    </el-form-item>

                    <el-form-item label="性别">
                        <el-select v-model="serachForm.gender" placeholder="请选择">
                            <el-option label="男" value="1"></el-option>
                            <el-option label="女" value="0"></el-option>
                        </el-select>
                    </el-form-item>

                    <el-date-picker v-model="serachForm.entrydate" type="daterange" range-separator="至" start-placeholder="开始日期" end-placeholder="结束日期">
                    </el-date-picker>

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

                <!-- table -->
                <el-table :data="tableData" border>
                    <el-table-column prop="name" label="姓名" width="180"></el-table-column>
                    <el-table-column label="图像" width="180">
                        <template slot-scope="scope">
                            <img :src="scope.row.image" style="width: 100px; height: 100px">
                        </template>
                    </el-table-column>
                    <el-table-column label="性别" width="140">
                        <template slot-scope="scope">
                            {{scope.row.gender == 1? '男' : '女'}}
                        </template>
                    </el-table-column>
                    <el-table-column prop="job" label="职位" width="180"></el-table-column>
                    <el-table-column prop="entrydate" label="入职日期" width="180"></el-table-column>
                    <el-table-column prop="updatetime" label="最后操作时间" width="240"></el-table-column>
                    <el-table-column label="操作" width="180">
                        <el-button type="primary" size="mini">编辑</el-button>
                        <el-button type="danger" size="mini">删除</el-button>
                    </el-table-column>

                </el-table>
                <br>
                <!-- pagination -->
                <el-pagination @size-change="handleSizeChange" 
                @current-change="handleCurrentChange" 
                :current-page.sync="currentPage3" 
                :page-size="100" layout="prev, pager, next, jumper" :total="1000">
                </el-pagination>

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

<script>
import axios from 'axios'
export default {
    data() {

        return {
            tableData: [],
            serachForm: {
                name: "",
                image: "",
                gender: "",
                job: "",
                entrydate: [],
                updatetime: "",
            }
        }
    },

    methods: {
        onSubmit() {
            this.$message({
                message: '提交成功',
                type: 'success'
            });
        },
        handleSizeChange(val) {
            this.$message(`每页 ${val} 条`);
        },
        handleCurrentChange(val) {
            this.$message(`当前页: ${val}`);
        }
    },
    mounted(){
        axios.get("https://result.eolink.com/zYisy7Y6950de7e106fe3806aa8351852f3b8ea5355e118?uri=/emp/getEmpInfo").then(res => {
            this.tableData = res.data.data;
            
        })
    },

};
</script>

<style></style>

其中的重点是Router路由。

这里重点讲讲:

首先要去route文件夹下的index.js 添加对应的路由。

const routes = [
  {
    path:'/dept',
    name:'dept',
    component:()=>import('../views/katarina/DeptView.vue')
  },
  {
    path: '/emp',
    name: 'employee',
    component: EmpView
  },
  {
    path: '/',
    redirect: '/dept'
  },
  
  
]

这里我用了两种方式添加,第二个对象如果大家上面没有import对应路径的话(代码里面没有写出来我说的这个import),直接学着第一个对象这样加就不用在上面import了。第三个对象是项目重启进去页面会在/下,这个是让他重定向跳到/dept路由下面。

第二步要改App.vue

不改的话这个页面跳转后,不会刷新。

第三步改对应模块的路由部分,我上面给出来了,这里画一下。

其实就是最后的使用路由了。

最后讲一下nginx。

打包部署

打包和部署是分开的,打包很简单。如图:

点一下,就会生成一个文件夹,这个文件夹中帮我们把这个项目都给包装了,让我们好带走使用。

说到带走使用,我想到食用,现在晚上11点了,饿了,但没关系,快写完了。

生成的文件:

带走使用?用到哪去呢?我们现在开这个网页要在vscode中开服务才能打开,我们总不能让用户也在vscode开网页把?所以打包是为了部署到服务器上,让用户输入正确的网址就能访问我们的网页。

nginx

用于部署前端工程,是现在很多公司都在用的主流部署工具。

部署完能干嘛? 

不开Vscode就能进入网页,但要开着nginx。

看我上面的项目结果图,输入网址就能进。

下载:去官网下载 

照着下,不要换版本。

运行可能会出问题,一般是端口被占用了,它默认端口是80.  就需要改一下端口。

怎么改?

本章完结。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值