Web开发系列-第3章 Vue2 + Element

第3章 Vue2 + Element

3.1 为什么使用Vue?

Vue的MVVM((Model-View-ViewModel))前端开发思想简化了数据绑定到视图的流程

  • Model: 数据模型,特指前端中通过请求从后台获取的数据。

  • View: 视图,用于展示数据的页面,可以理解成我们的html+css搭建的页面,但是没有数据。

  • ViewModel: 数据绑定到视图,负责将数据(Model)通过JavaScript的DOM技术,将数据展示到视图(View)上。

<body>
    <div id="app">
        <input type="text" v-model="message">
        {{message}}
    </div>
</body>
<script src="js/vue.js"></script>
<script>
    //定义Vue对象
    new Vue({
        el: "#app", //vue接管区域
        data:{
            message: "Hello Vue"
        }
    })
</script>

3.2 Vue指令

vue的常用指令,如下表所示:

指令作用
v-bind/:为HTML标签绑定属性值,如设置 href , css样式等
v-model在表单元素上创建双向数据绑定
v-on/@为HTML标签绑定事件
v-if条件性的渲染某元素,判定为true时渲染,否则不渲染(用于低频率切换元素)
v-else
v-else-if
v-show根据条件展示某元素,区别在于切换的是display属性的值(用于高频率切换元素)
v-for列表渲染,遍历容器的元素或者对象的属性

v-if和v-show示例代码:

年龄<input type="text" v-model="age">经判定,为:
<span v-if="age <= 35">年轻人(35及以下)</span>
<span v-else-if="age > 35 && age < 60">中年人(35-60)</span>
<span v-else>老年人(60及以上)</span>
​
年龄<input type="text" v-model="age">经判定,为:
<span v-show="age <= 35">年轻人(35及以下)</span>
<span v-show="age > 35 && age < 60">中年人(35-60)</span>
<span v-show="age >= 60">老年人(60及以上)</span>

v-for指令遍历的语法格式如下:

 <tr align="center" v-for="(user,index) in users">
     <td>{{index + 1}}</td>
     <td>{{user.name}}</td>
     <td>{{user.age}}</td>
     <td>
         <span v-if="user.gender == 1">男</span>
         <span v-if="user.gender == 2">女</span>
     </td>
     <td>{{user.score}}</td>
     <td>
         <span v-if="user.score >= 85">优秀</span>
         <span v-else-if="user.score >= 60">及格</span>
         <span style="color: red;" v-else>不及格</span>
     </td>
</tr>

3.3 Vue生命周期

vue的生命周期:指的是vue对象从创建到销毁的过程。

生命周期如下图所示:

状态阶段周期
beforeCreate创建前
created创建后
beforeMount挂载前
mounted挂载完成
beforeUpdate更新前
updated更新后
beforeDestroy销毁前
destroyed销毁后

常用的是mounted阶段,用于在网页挂载后获取后台数据。

3.4 为什么使用Ajax & Axios

Ajax: 全称Asynchronous JavaScript And XML,异步的JavaScript和XML。其作用有如下2点:

  • 与服务器进行数据交换。

  • 异步交互:在不重新加载整个页面时,与服务器交换数据并更新部分网页的技术,例如:Ajax请求不会导致整个百度页面的重新加载,并且只针对搜索栏这局部模块的数据进行了数据的更新。

Axios:对AJAX进行封装,简化书写。提高了开发数据交换功能的效率。

Axios官网是:https://www.axios-http.cn

  • Axios使用步骤:

    1.引入Axios依赖

    2.编写Axios的发送请求方法

    例如:发送post请求

    axios({
        method:"post",
        url:"http://localhost:8080/ajax-demo1/aJAXDemo1",
        data:"username=zhangsan"
    }).then(function (resp){
        alert(resp.data);
    });
  • 针对不同请求的api:

    方法描述
    axios.get(url [, config])发送get请求
    axios.delete(url [, config])发送delete请求
    axios.post(url [, data[, config]])发送post请求
    axios.put(url [, data[, config]])发送put请求

    示例代码:

    axios.post("http://yapi.smart-xwork.cn/mock/169327/emp/deleteById","id=1").then(result => {
        console.log(result.data);
    })

3.5 前端工程化

3.5.1 什么是前端工程化?

前端工程化包括如下4个特点

  • 模块化:将js和css等,做成一个个可复用模块

  • 组件化:我们将UI组件,css样式,js行为封装成一个个的组件,便于管理

  • 规范化:我们提供一套标准的规范的目录接口和编码规范,所有开发人员遵循这套规范

  • 自动化:项目的构建,测试,部署全部都是自动完成

5.5.2 前端工程化分几步?

0.要安装NodeJS和安装Vue-cli,NodeJS为JavaScript提供了运行环境,Vue-cli是脚手架工具。

1.创建vue项目

  • 命令行:直接通过命令行方式创建vue项目

    vue create vue-project01

  • 图形化界面:通过命令先进入到图形化界面,然后再进行vue工程的创建

    vue ui

    vue项目的标准目录结构以及目录对应的解释如下图所示:

    1669302973198

3.6 Vue项目开发流程

index.html 是默认首页;main.js是人口文件;App.vue是根组件。

对于vue项目,index.html文件默认是引入了入口函数main.js文件,我们找到src/main.js文件,其代码如下:

import Vue from 'vue'
import App from './App.vue'
import router from './router'
​
Vue.config.productionTip = false
​
new Vue({
  router,
  render: h => h(App)
}).$mount('#app')
​

上述代码中,包括如下几个关键点:

  • import: 导入指定文件,并且重新起名。例如上述代码import App from './App.vue'导入当前目录下得App.vue并且起名为App

  • new Vue(): 创建vue对象

  • $mount('#app');将vue对象创建的dom对象挂在到id=app的这个标签区域中,作用和之前学习的vue对象的le属性一致。

  • router: 路由,详细在后面的小节讲解

  • render: 主要使用视图的渲染的。

vue的组件文件包含3个部分:

  • template: 模板部分,主要是HTML代码,用来展示页面主体结构的

  • script: js代码区域,主要是通过js代码来控制模板的数据来源和行为的

  • style: css样式部分,主要通过css样式控制模板的页面效果得

如下图所示就是一个vue组件的小案例:

1669313699186

3.7 Vue组件库Element

Element:是饿了么公司前端开发团队提供的一套基于 Vue 的网站组件库,用于快速构建网页。Element 提供了很多组件(组成网页的部件)供我们使用。

其官网地址:Element - The world's most popular Vue UI framework

3.7.1 使用Element组件库分几步?

1.安装ElementUI的组件库

  • 命令行输入如下命令:

    npm install element-ui@2.15.3 
  • 具体操作如下图所示:

    1669358653297

2.在main.js人口文件中中引入ElementUI的组件库,其代码如下:

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

Vue.use(ElementUI);

具体操作如图所示:

1669358935188

3.在src/views目录下创建一个新的组件文件XxxxXxxx.vue,并去ElementUI组件库粘贴、改造代码。

4.默认访问的根组件src/App.vue中引入我们自定义的组件,具体操作步骤如下:

1669360320983

3.7.2 Element组件库常用组件有哪些?

常用组件如下表格:

组件作用
Button按钮常用的操作按钮。
Form 表单由输入框、选择器、单选框、多选框等控件组成,用以收集、校验、提交数据。
Table 表格展示多条结构类似的数据,可对数据进行排序、筛选、对比或其他自定义操作。
Pagination分页当数据量过多时,使用分页分解数据。
Dialog 对话框在保留当前页面状态的情况下,告知用户并承载相关操作。
Container 布局容器用于布局的容器组件,方便快速搭建页面的基本结构。

3.7.3 Vue项目的Axios使用

在vue项目中,对于axios的使用,分为如下2步:

  1. 安装axios: npm install axios;

  2. 需要使用axios时,导入axios: import axios from 'axios'

3.7.4 如何修复后端数据的真实含义?

在数据标签中插入如下的自定义列内容。

如下:性别内容展示修复和图片内容展示修复

<el-table-column prop="gender"    label="性别" width="140">
     <template slot-scope="scope">
    	 {{scope.row.gender==1?"男":"女"}}
     </template>
</el-table-column>

<el-table-column prop="image"     label="图像" width="180">
    <template slot-scope="scope">
        <img :src="scope.row.image" width="100px" height="70px">
    </template>
</el-table-column>

3.8 如何进行导航跳转(Vue路由)?

vue官方提供了路由插件Vue Router,其主要组成如下:

  • VueRouter:路由器类,根据路由请求在路由视图中动态渲染选中的组件

  • <router-link>:请求链接组件,浏览器会解析成<a>

  • <router-view>:动态视图组件,用来渲染展示与路由路径对应的组件

其工作原理如下图所示:

1669386261570

首先VueRouter根据我们配置的url的hash片段和路由的组件关系去维护一张路由表;

然后我们页面提供一个<router-link>组件,用户点击,发出路由请求;

接着我们的VueRouter根据路由请求,在路由表中找到对应的vue组件;

最后VueRouter会切换<router-view>中的组件,从而进行视图的更新

3.8.1 开发Vue路由功能分几步?

1.安装vue-router插件,可以通过如下命令

npm install vue-router@3.5.1

或者在创建项目时,选择路由功能

2.在src/router/index.js文件中自定义路由表,根据其提供的模板代码进行修改,最终代码如下:

import Vue from 'vue'
import VueRouter from 'vue-router'

Vue.use(VueRouter)

const routes = [
  {
    path: '/emp',  //地址hash
    name: 'emp',
    component:  () => import('../views/tlias/EmpView.vue')  //对应的vue组件
  },
  {
    path: '/dept',
    name: 'dept',
    component: () => import('../views/tlias/DeptView.vue')
  }
]

const router = new VueRouter({
  routes
})

export default router

3.导航栏中添加超链接,例:修改2个页面(EmpView.vue和DeptView.vue)我们左侧栏的2个按钮为router-link,其代码如下:

<el-menu-item index="1-1">
    <router-link to="/dept">部门管理</router-link>
</el-menu-item>
<el-menu-item index="1-2">
    <router-link to="/emp">员工管理</router-link>
</el-menu-item>

4.在App.vue中定义route-view,作为组件的切换,其App.vue的完整代码如下:

<template>
  <div id="app">
    <!-- {{message}} -->
    <!-- <element-view></element-view> -->
    <!-- <emp-view></emp-view> -->
    <router-view></router-view>
  </div>
</template>

<script>
// import EmpView from './views/tlias/EmpView.vue'
// import ElementView from './views/Element/ElementView.vue'
export default {
  components: { },
  data(){
    return {
      "message":"hello world"
    }
  }
}
</script>
<style>

</style>

5.默认路由路径重定向,下面是示例代码:

const routes = [
  {
    path: '/emp',
    name: 'emp',
    component:  () => import('../views/tlias/EmpView.vue')
  },
  {
    path: '/dept',
    name: 'dept',
    component: () => import('../views/tlias/DeptView.vue')
  },
  {
    path: '/',
    redirect:'/emp' //表示重定向到/emp即可
  },
]

3.9 打包部署

3.9.1 前端工程打包

我们直接通过VS Code的NPM脚本中提供的build按钮来完整,如下图所示,直接点击即可:

1669389052906

然后会在工程目录下生成一个dist目录,用于存放需要发布的前端资源,如下图所示:

1669389147027

3.9.2 Nginx部署前端工程

3.9.2.1 为什么使用nginx?

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

3.9.2.2 在nginx中部署

niginx在windows中的安装是比较方便的,直接解压即可。所以我们直接将资料中的nginx-1.22.0.zip压缩文件拷贝到无中文的目录下,直接解压即可,如下图所示就是nginx的解压目录以及目录结构说明:

1669389642057

很明显,我们如果要发布,直接将资源放入到html目录中。

通过双击nginx下得nginx.exe文件来启动nginx。

默认端口号为80端口,也可以省略直接访问相应网址

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值