• JavaWeb基础10——VUE&Element&整合Javaweb的商品管理系统


    用于复习快速回顾。

    目录

    1,VUE

    1.1 概述

    1.2 快速入门

    1.3 Vue 指令

    1.3.1 v-bind & v-model 指令

    1.3.2 v-on 指令

    1.3.3 条件判断指令

    1.3.4 v-for 指令

    1.4 生命周期

    概述 

    created和mounted的区别

    1.4.5 this和$

    1.5 案例,vue展示品牌列表

    1.5.1 需求

    1.5.2 查询所有功能

    1.5.3 添加功能

    2,Element

    2.1 快速入门,使用el-button组件

    2.2 Element 布局

    2.2.1 Layout 局部

    2.2.2 Container 布局容器

    2.3 案例,element商品列表展示

    2.3.1 准备基本页面

    2.3.2 完成表格展示商品

    2.3.3 完成搜索表单展示

    2.3.4 完成批量删除和新增按钮展示

    2.3.5 完成对话框展示

    2.3.6 完成分页条展示

    2.3.7 完整页面代码

    3,综合案例,element商品列表展示增删改查

    3.1 功能介绍

    3.1.5 坑点总结

    3.2 环境准备

    3.2.1 工程准备和最终目录结构​​​​​​​

    3.2.2 创建表

    3.3 查询所有功能

    3.3.1 后端实现,service优化

    3.3.2 前端实现

    4,添加功能

    4.1 后端实现

    4.1.1 dao方法实现

    4.1.2 service方法实现

    4.1.3 servlet实现

    4.2 前端实现

    5,servlet优化

    5.1 优化方法,BaseServlet

    5.2 代码优化

    5.2.1 后端优化

    5.2.2 前端优化

    6,批量删除

    6.1 后端实现

    6.1.1 dao方法实现

    6.1.2 service方法实现

    6.1.3 servlet实现

    6.2 前端实现

    6.2.1 获取选中的id值

    6.2.2 发送异步请求

    6.2.3 确定框实现

    7,分页查询

    7.1 分析

    7.1.1 分页查询sql

    7.1.2 前后端数据分析

    7.1.25 JavaBean

    7.1.3 流程、参数分析

    7.2 后端实现

    7.2.1 dao方法实现

    7.2.2 service方法实现

    7.2.3 servlet实现

    7.2.4 测试

    7.3 前端实现

    7.3.1 selectAll 代码改进

    7.3.2 改变每页条目数

    7.3.3 改变当前页码

    8,条件查询

    8.1 后端实现

    8.1.1 dao实现

    8.1.2 service实现

    8.1.3 servlet实现

    8.2 前端实现

    9,箭头函数,前端代码优化


    1,VUE

    1.1 概述

    Vue 是一套前端框架,免除原生JavaScript中的DOM操作,简化书写。

    DOM:Document Object Model 文档对象模型。也就是 JavaScript 将 HTML 文档的各个组成部分封装为对象。作用:使javascript有能力操作HTML文档(获取HTML标记元素,添加HTML标记元素,删除HTML标记元素等)

    类似Mybatis 框架是用来简化 jdbc 代码编写的。而 VUE 是前端的框架,是用来简化 JavaScript 代码编写的。

    上节axios时候有一个案例,里面进行了大量的DOM操作,如下

    学习了 VUE 后,这部分代码我们就不需要再写了。那么 VUE 是如何简化 DOM 书写呢?

    基于MVVM(Model-View-ViewModel)思想,实现数据的双向绑定,将编程的关注点放在数据上。之前我们是将关注点放在了 DOM 操作上。

    MVC 思想图解

    C 就是咱们 js 代码,M 就是数据,而 V 是页面上展示的内容,如下图是我们之前写的代码

    MVC 思想只能模型到视图的单向展示,是没法进行双向绑定的。

    模型和视图双向绑定

    双向绑定是指当模型发生变化时,视图的会随之发生变化;而如果视图发生变化,绑定的模型数据也随之发生变化。

    双向绑定作用

    从界面的操作能实时反映到数据,数据的变更能实时展现到界面

    MVVM 思想三个组件图解

    图中的 Model 是数据View 是视图,也就是页面标签,用户可以通过浏览器看到的内容;

    ModelView 是通过 ViewModel 对象进行双向绑定的,而 ViewModel 对象是 Vue 提供的。

    双向绑定的效果,下图输入框绑定了 username 模型数据,而在页面上也使用 {{}} 绑定username 模型数据

    通过浏览器打开该页面可以看到如下页面

    当我们在输入框中输入内容,而输入框后面随之实时的展示我们输入的内容,这就是双向绑定的效果。

    1.2 快速入门

    Vue 使用分为如下三步:

    v-model在表单元素上创建双向数据绑定

    vue里data()设置username值并展示在输入框,反过来又可以手动修改输入框内容设置vue里username值 

    1. 新建 HTML 页面,引入 Vue.js文件。这里vue.js版本v2.7.8,下载地址Installation — Vue.js

      <script src="js/vue.js">script>

    2. 在JS代码区域,创建Vue核心对象,传入JSON对象进行数据绑定

      1. new Vue({
      2. el: "#app",
      3. // data() 是 ECMAScript 6 版本的新的写法,旧写法data:function(){}
      4. data() {
      5. return {
      6. username: ""
      7. }
      8. }
      9. //methods不是method,并且后面没括号
      10. methods:{
      11. }
      12. mounted(){}
      13. });

      创建 Vue 对象时,需要传递一个 js 对象,而该对象中需要如下属性:

      • el 用来指定哪些id的标签受 Vue 管理。 该属性取值 #app 中的 app 需要是受管理的标签的id属性值

      • data :用来定义数据模型

      • methods用来定义函数。

    3. 编写视图

      1. <div id="app">
      2. <input v-model="username" >
      3. {{username}}
      4. div>

      {{}} 是 Vue 中定义的 插值表达式 ,在里面写数据模型,到时候会将该模型的数据值展示在这个位置。

    整体代码如下:

    1. html>
    2. <html lang="en">
    3. <head>
    4. <meta charset="UTF-8">
    5. <title>Titletitle>
    6. head>
    7. <body>
    8. <div id="app">
    9. <input v-model="username"><br>
    10. input里的值是:{{username}}
    11. div>
    12. <script src="js/vue.js">script>
    13. <script>
    14. //1. 创建Vue核心对象
    15. new Vue({
    16. el:"#app",
    17. data(){ // data() 是 ECMAScript 6 版本的新的写法
    18. return {
    19. username:"默认值"
    20. }
    21. }
    22. /*data: function () {
    23. return {
    24. username:""
    25. }
    26. }*/
    27. });
    28. script>
    29. body>
    30. html>

    1.3 Vue 指令

    指令:HTML 标签上带有 v- 前缀的特殊属性,不同指令具有不同含义。例如:v-if,v-for…

    常用的指令有:

    指令作用
    v-bind为HTML标签绑定属性值,如设置 href , css样式等,bind译为捆绑。v-bind:href="url"
    v-model在表单元素上创建双向数据绑定。v-model="username"        {{username}}
    v-on为HTML标签绑定事件。v-on:click="show()"
    v-if条件性的渲染某元素,判定为true时渲染,否则不渲染。v-if="count==3"
    v-else
    v-else-if
    v-show根据条件展示某元素,区别在于切换的是display属性的值。v-show="count==3"
    v-for列表渲染,遍历容器的元素或者对象的属性。v-for="(str,i) in strs"

    只有v-bind,v-on中间有冒号,因为属性和事件都有多种。

    1.3.1 v-bind & v-model 指令

    • v-bind

      该指令可以给标签原有属性绑定模型数据。这样vue的data()里模型数据发生变化,标签属性值也随之发生变化

      例如:

      <a v-bind:href="url">百度一下a>

      上面的 v-bind:" 可以简化写成 : ,如下:

      1. <a :href="url">百度一下a>

    • v-model

      该指令可以给表单项标签绑定模型数据。这样就能实现双向绑定效果(vue里data()设置username值并展示在输入框,反过来又可以手动修改输入框内容设置vue里username值)。例如:

      <input name="username" v-model="username">

    代码演示:

    1. html>
    2. <html lang="en">
    3. <head>
    4. <meta charset="UTF-8">
    5. <title>Titletitle>
    6. head>
    7. <body>
    8. <div id="app">
    9. <a v-bind:href="url">点击一下a>
    10. <a :href="url">点击一下a>
    11. <input v-model="url">
    12. div>
    13. <script src="js/vue.js">script>
    14. <script>
    15. //1. 创建Vue核心对象
    16. new Vue({
    17. el:"#app",
    18. data(){
    19. return {
    20. username:"",
    21. url:"https://www.baidu.com"
    22. }
    23. }
    24. });
    25. script>
    26. body>
    27. html>

    通过浏览器打开上面页面,并且使用检查查看超链接的路径,该路径会根据输入框输入的路径变化而变化,这是因为超链接和输入框绑定的是同一个模型数据

    1.3.2 v-on 指令

    我们在页面定义一个按钮,并给该按钮使用 v-on 指令绑定单击事件,html代码如下

    <input type="button" value="一个按钮" v-on:click="show()">

    而使用 v-on 时还可以使用简化的写法,将 v-on: 替换成 @,html代码如下

    <input type="button" value="一个按钮" @click="show()">

    上面代码绑定的 show() 需要在 Vue 对象中的 methods 属性中定义出来

    1. new Vue({
    2. el: "#app",
    3. methods: {
    4. show(){
    5. alert("我被点了");
    6. }
    7. }
    8. });

    注意:v-on: 后面的事件名称是之前原生事件属性名去掉on。

    例如:

    • 单击事件 : 事件属性名是 onclick,而在vue中使用是 v-on:click

    • 失去焦点事件:事件属性名是 onblur,而在vue中使用时 v-on:blur

    整体页面代码如下:

    1. html>
    2. <html lang="en">
    3. <head>
    4. <meta charset="UTF-8">
    5. <title>Titletitle>
    6. head>
    7. <body>
    8. <div id="app">
    9. <input type="button" value="一个按钮" v-on:click="show()"><br>
    10. <input type="button" value="一个按钮" @click="show()">
    11. div>
    12. <script src="js/vue.js">script>
    13. <script>
    14. //1. 创建Vue核心对象
    15. new Vue({
    16. el:"#app",
    17. data(){
    18. return {
    19. username:"",
    20. }
    21. },
    22. methods:{
    23. show(){
    24. alert("我被点了...");
    25. }
    26. }
    27. });
    28. script>
    29. body>
    30. html>

    1.3.3 条件判断指令

    接下来通过代码演示一下。在 Vue中定义一个 count 的数据模型,如下

    1. //1. 创建Vue核心对象
    2. new Vue({
    3. el:"#app",
    4. data(){
    5. return {
    6. count:3
    7. }
    8. }
    9. });

    现在要实现,当 count 模型的数据是3时,在页面上展示 div1 内容;当 count 模型的数据是4时,在页面上展示 div2 内容;count 模型数据是其他值时,在页面上展示 div3。这里为了动态改变模型数据 count 的值,再定义一个输入框绑定 count 模型数据。html 代码如下:

    1. <div id="app">
    2. <div v-if="count == 3">div1div>
    3. <div v-else-if="count == 4">div2div>
    4. <div v-else>div3div>
    5. <hr>
    6. <input v-model="count">
    7. div>

    整体页面代码如下:

    1. html>
    2. <html lang="en">
    3. <head>
    4. <meta charset="UTF-8">
    5. <title>Titletitle>
    6. head>
    7. <body>
    8. <div id="app">
    9. <div v-if="count == 1">div1div>
    10. <div v-else-if="count == 2">div2div>
    11. <div v-else>div3div>
    12. <hr>
    13. 设置count的值:<input v-model="count"><br>
    14. 目前count的值:{{count}}
    15. div>
    16. <script src="js/vue.js">script>
    17. <script>
    18. //1. 创建Vue核心对象
    19. new Vue({
    20. el:"#app",
    21. data(){
    22. return {
    23. count:3
    24. }
    25. }
    26. });
    27. script>
    28. body>
    29. html>

    通过浏览器打开页面并在输入框输入不同的值,效果如下

    v-show

    然后我们在看看 v-show 指令的效果,如果模型数据 count 的值是3时,展示 div v-show 内容,否则不展示,html页面代码如下

    1. <div v-show="count == 3">div v-showdiv>
    2. <br>
    3. <input v-model="count">

    浏览器打开效果如下:

    v-if和v-show区别 

    通过下图可以看出 v-show 不展示的原理是给对应的标签添加 display css属性,并将该属性值设置为 none ,这样就达到了隐藏的效果。而 v-if 指令是条件不满足时根本就不会渲染。在网页源码只能看见v-show的标签,看不见不满足判断条件的v-if标签。

    1.3.4 v-for 指令

    这个指令看到名字就知道是用来遍历的,该指令使用的格式如下:

    1. <标签 v-for="变量名 in 集合模型数据">
    2. {{变量名}}
    1. <div v-for="addr in addrs">
    2. {{addr}} <br>
    3. div>

    注意:需要循环哪个标签,v-for 指令就写在哪个标签上。

    如果在页面需要使用到集合模型数据的索引,就需要使用如下格式:

    1. <标签 v-for="(变量名,索引变量) in 集合模型数据">
    2. {{索引变量 + 1}} {{变量名}}

    1. <div v-for="(addr,i) in addrs">
    2. {{i+1}}--{{addr}} <br>
    3. div>

    代码演示:

    1. html>
    2. <html lang="en">
    3. <head>
    4. <meta charset="UTF-8">
    5. <title>Titletitle>
    6. head>
    7. <body>
    8. <div id="app">
    9. <div v-for="addr in addrs">
    10. {{addr}} <br>
    11. div>
    12. <hr>
    13. <div v-for="(addr,i) in addrs">
    14. {{i+1}}--{{addr}} <br>
    15. div>
    16. div>
    17. <script src="js/vue.js">script>
    18. <script>
    19. //1. 创建Vue核心对象
    20. new Vue({
    21. el:"#app",
    22. data(){
    23. return {
    24. //注意:Java中的数组静态初始化使用的是{}定义,而 JavaScript 中使用的是 [] 定义
    25. addrs:["北京","上海","西安"]
    26. }
    27. }
    28. });
    29. script>
    30. body>
    31. html>

    通过浏览器打开效果如下

    1.4 生命周期

    概述 

    生命周期的八个阶段:每触发一个生命周期事件,会自动执行一个生命周期方法,这些生命周期方法也被称为钩子方法

    其他了解即可,主要用的是mounted,类似于window.onload

    下图是 Vue 官网提供的从创建 Vue 到效果 Vue 对象的整个过程及各个阶段对应的钩子函数

    看到上面的图,大家无需过多的关注这张图。这些钩子方法我们只关注 mounted 就行了。

    mounted:挂载完成,Vue初始化成功,HTML页面渲染成功。而以后我们会在该方法中发送异步请求,加载数据。

    1. new Vue({
    2. el:"#app",
    3. data(){
    4. return {
    5. addrs:["北京","上海","西安"]
    6. }
    7. },
    8. mounted(){ //跟data类似,是简化后的版本
    9. alert("加载完成");
    10. }
    11. });

    created和mounted的区别

    created:在模板渲染成html调用,即通常初始化某些属性值,然后再渲染成识图。
    mounted:在模板渲染成html调用,通常初始化页面完成后,再对html的dom节点进行一些需要的操作。 

    created() 和 mounted() 之间的根本区别在于访问DOM,如果尝试引用 this.$el,在 created() 中返回 null,在 mounted() 中返回 DOM 元素:

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    export default {

        created() {

            // 打印 null

            console.log(this.$el);

        },

        mounted() {

            // 打印 DOM 元素

            console.log(this.$el);

        },

    };

    因此,任何 DOM 操作,甚至使用诸如 querySelector 之类的方法获取 DOM 元素结构将无法在 created() 中使用。因此根据这点区别 created() 非常适合调用 API,而 mounted() 非常适合在 DOM 元素完全加载后执行任何操作。

    1.4.5 this和$

    this:

    Vue中生命周期钩子、自定义方法,axios和axios中then(箭头函数)的this指向当前的 Vue 实例

    方法内方法或axios的then(非箭头函数)中this指向window。 

    注意:axios内的this:

    1. selectAll(){
    2. //这里this指向vue
    3. axios({
    4. 这里this指向vue
    5. }).then(function (response){
    6. 这里this指向window
    7. })
    8. },
    1. selectAll(){
    2. //这里this指向vue
    3. axios({
    4. 这里this指向vue
    5. }).then(response=>{
    6. 这里this指向vue
    7. })
    8. },

    this指向vue:可以通过this.xxx和this.xxx()调用vue中的数据和方法。        

    $:挂载在this上的vue内部属性

    我们在运用vue开发到“会用”而不是“为什么要用”阶段时往往会碰见很多理解并不是很深的语法
    如this.$refs.form、this.$routes、this.$store等.
    那么此处的$是什么意思,有哪些需要注意的点?

    1. 我们在运用vue开发到“会用”而不是“为什么要用”阶段时往往会碰见很多理解并不是很深的语法
    2. this.$refs.form、this.$routes、this.$store等
    3. 那么此处的$是什么意思,有哪些需要注意的点?
    4. 挂载在this上的vue内部属性
    5. 一个特殊标记。增强区分的,来说明这是内置的实例方法属性
    6. 内部 api 的命名空间
    7. 带 $ 的是 VUE 框架(或插件)定义的属性方法

    1.5 案例,vue展示品牌列表

    1.5.1 需求

    使用 Vue 简化我们在前一天ajax学完后做的品牌列表数据查询和添加功能

    JavaWeb基础9——Filter&Listener&Ajax_vincewm的博客-CSDN博客

    此案例只是使用 Vue 对前端代码进行优化,后端代码无需修改。

    1.5.2 查询所有功能

    1. 在 brand.html 页面引入 vue 的js文件

      <script src="js/vue.js">script>

    2. 创建 Vue 对象

      • 在 Vue 对象中定义模型数据

      • 在钩子函数中发送异步请求,并将响应的数据赋值给数据模型

      1. new Vue({
      2. el: "#app",
      3. data(){
      4. return{
      5. brands:[]
      6. }
      7. },
      8. mounted(){
      9. // 页面加载完成后,发送异步请求,查询数据
      10. //this指代当前vue对象,要用this才能取出vue对象中的数据
      11. var _this = this;
      12. axios({
      13. method:"get",
      14. url:"http://localhost:8080/brand-demo/selectAllServlet"
      15. }).then(function (resp) {
      16. //这里如果直接this.brands,则this指代当前axios对象
      17. _this.brands = resp.data;
      18. })
      19. }
      20. })

    3. 修改视图

      • 定义

        ,指定该 div 标签受 Vue 管理

      • body 标签中所有的内容拷贝作为上面 div 标签中

      • 删除表格的多余数据行,只留下一个

      • 在表格中的数据行上使用 v-for 指令遍历

        1. <tr v-for="(brand,i) in brands">
        2. <td>{{i+1}}td>
        3. <td>{{brand.brandName}}td>
        4. <td>{{brand.companyName}}td>
        5. <td>{{brand.ordered}}td>
        6. <td>{{brand.description}}td>
        7. <td v-if="brand.status==1">启用td>
        8. <td v-else>禁用td>
        9. <td><a href="#">修改a> <a href="#">删除a>td>
        10. tr>

    整体页面代码如下:

    1. html>
    2. <html lang="en">
    3. <head>
    4. <meta charset="UTF-8">
    5. <title>Titletitle>
    6. head>
    7. <body>
    8. <div id="app">
    9. <a href="addBrand.html"><input type="button" value="新增">a><br>
    10. <hr>
    11. <table id="brandTable" border="1" cellspacing="0" width="100%">
    12. <tr>
    13. <th>序号th>
    14. <th>品牌名称th>
    15. <th>企业名称th>
    16. <th>排序th>
    17. <th>品牌介绍th>
    18. <th>状态th>
    19. <th>操作th>
    20. tr>
    21. <tr v-for="(brand,i) in brands">
    22. <td>{{i+1}}td>
    23. <td>{{brand.brandName}}td>
    24. <td>{{brand.companyName}}td>
    25. <td>{{brand.ordered}}td>
    26. <td>{{brand.description}}td>
    27. <td v-if="brand.status==1">启用td>
    28. <td v-else>禁用td>
    29. <td><a href="#">修改a> <a href="#">删除a>td>
    30. tr>
    31. table>
    32. div>
    33. <script src="js/axios-0.18.0.js">script>
    34. <script src="js/vue.js">script>
    35. <script>
    36. new Vue({
    37. el: "#app",
    38. data(){
    39. return{
    40. brands:[]
    41. }
    42. },
    43. mounted(){
    44. // 页面加载完成后,发送异步请求,查询数据
    45. var _this = this;
    46. axios({
    47. method:"get",
    48. url:"http://localhost:8080/brand-demo/selectAllServlet"
    49. }).then(function (resp) {
    50. _this.brands = resp.data;
    51. })
    52. }
    53. })
    54. script>
    55. body>
    56. html>

    1.5.3 添加功能

    页面操作效果如下:

    整体流程如下

    注意:前端代码的关键点在于使用 v-model 指令给标签项绑定模型数据,利用双向绑定特性,在发送异步请求时提交数据。

    1. 在 addBrand.html 页面引入 vue 的js文件

      <script src="js/vue.js">script>

    2. 创建 Vue 对象

      • 在 Vue 对象中定义模型数据 brand

      • 定义一个 submitForm() 函数,用于给 提交 按钮提供绑定的函数

      • submitForm() 函数中发送 ajax 请求,并将模型数据 brand 作为参数进行传递

      1. new Vue({
      2. el: "#app",
      3. data(){
      4. return {
      5. brand:{}
      6. }
      7. },
      8. methods:{
      9. submitForm(){
      10. // 发送ajax请求,添加
      11. var _this = this;
      12. axios({
      13. method:"post",
      14. url:"http://localhost:8080/brand-demo/addServlet",
      15. data:_this.brand
      16. }).then(function (resp) {
      17. // 判断响应数据是否为 success
      18. if(resp.data == "success"){
      19. location.href = "http://localhost:8080/brand-demo/brand.html";
      20. }
      21. })
      22. }
      23. }
      24. })

    3. 修改视图

      • 定义

        ,指定该 div 标签受 Vue 管理

      • body 标签中所有的内容拷贝作为上面 div 标签中

      • 给每一个表单项标签绑定模型数据。最后这些数据要被封装到 brand 对象中

        1. <div id="app">
        2. <h3>添加品牌h3>
        3. <form action="" method="post">
        4. 品牌名称:<input id="brandName" v-model="brand.brandName" name="brandName"><br>
        5. 企业名称:<input id="companyName" v-model="brand.companyName" name="companyName"><br>
        6. 排序:<input id="ordered" v-model="brand.ordered" name="ordered"><br>
        7. 描述信息:<textarea rows="5" cols="20" id="description" v-model="brand.description" name="description">textarea><br>
        8. 状态:
        9. <input type="radio" name="status" v-model="brand.status" value="0">禁用
        10. <input type="radio" name="status" v-model="brand.status" value="1">启用<br>
        11. <input type="button" id="btn" @click="submitForm" value="提交">
        12. form>
        13. div>

    整体页面代码如下:

    1. html>
    2. <html lang="en">
    3. <head>
    4. <meta charset="UTF-8">
    5. <title>添加品牌title>
    6. head>
    7. <body>
    8. <div id="app">
    9. <h3>添加品牌h3>
    10. <form action="" method="post">
    11. 品牌名称:<input id="brandName" v-model="brand.brandName" name="brandName"><br>
    12. 企业名称:<input id="companyName" v-model="brand.companyName" name="companyName"><br>
    13. 排序:<input id="ordered" v-model="brand.ordered" name="ordered"><br>
    14. 描述信息:<textarea rows="5" cols="20" id="description" v-model="brand.description" name="description">textarea><br>
    15. 状态:
    16. <input type="radio" name="status" v-model="brand.status" value="0">禁用
    17. <input type="radio" name="status" v-model="brand.status" value="1">启用<br>
    18. <input type="button" id="btn" @click="submitForm" value="提交">
    19. form>
    20. div>
    21. <script src="js/axios-0.18.0.js">script>
    22. <script src="js/vue.js">script>
    23. <script>
    24. new Vue({
    25. el: "#app",
    26. data(){
    27. return {
    28. brand:{}
    29. }
    30. },
    31. methods:{
    32. submitForm(){
    33. // 发送ajax请求,添加
    34. var _this = this;
    35. axios({
    36. method:"post",
    37. url:"http://localhost:8080/brand-demo/addServlet",
    38. data:_this.brand
    39. }).then(function (resp) {
    40. // 判断响应数据是否为 success
    41. if(resp.data == "success"){
    42. location.href = "http://localhost:8080/brand-demo/brand.html";
    43. }
    44. })
    45. }
    46. }
    47. })
    48. script>
    49. body>
    50. html>

    通过上面的优化,前端代码确实简化了不少。但是页面依旧是不怎么好看,那么接下来我们学习 Element,它可以美化页面。

    2,Element

    Element:是饿了么公司前端开发团队提供的一套基于 Vue 的网站组件库,用于快速构建网页。

    Element 提供了很多组件(组成网页的部件)供我们使用。例如 超链接、按钮、图片、表格等等~

    如下图左边的是我们编写页面看到的按钮,上图右边的是 Element 提供的页面效果,效果一目了然。

    我们学习 Element 其实就是学习怎么从官网拷贝组件到我们自己的页面并进行修改。

    官网网址(基于vue2)

    https://element.eleme.cn/#/zh-CN

    进入官网能看到如下页面

    接下来直接点击 组件 ,页面如下

    2.1 快速入门,使用el-button组件

    1. 将资源 element-ui 文件夹直接拷贝到项目的 webapp 下。目录结构如下

    2. 创建页面,并在页面引入Element 的css、js文件 和 Vue.js

      1. <script src="js/vue.js">script>
      2. <script src="element-ui/lib/index.js">script>
      3. <link rel="stylesheet" href="element-ui/lib/theme-chalk/index.css">

    3. .创建Vue核心对象

      Element 是基于 Vue 的,所以使用Element时必须要创建 Vue 对象

      1. <script>
      2. new Vue({
      3. el:"#app"
      4. })
      5. script>

    4. 官网复制Element组件代码

      在左菜单栏找到 Button 按钮 ,然后找到自己喜欢的按钮样式,点击 显示代码 ,在下面就会展示出对应的代码,将这些代码拷贝到我们自己的页面即可。

    整体页面代码如下:

    1. html>
    2. <html lang="en">
    3. <head>
    4. <meta charset="UTF-8">
    5. <title>Titletitle>
    6. head>
    7. <body>
    8. <div id="app">
    9. <el-row>
    10. <el-button>默认按钮el-button>
    11. <el-button type="primary">主要按钮el-button>
    12. <el-button type="success">成功按钮el-button>
    13. <el-button type="info">信息按钮el-button>
    14. <el-button type="warning">警告按钮el-button>
    15. <el-button type="danger">删除el-button>
    16. el-row>
    17. div>
    18. <script src="js/vue.js">script>
    19. <script src="element-ui/lib/index.js">script>
    20. <link rel="stylesheet" href="element-ui/lib/theme-chalk/index.css">
    21. <script>
    22. new Vue({
    23. el:"#app"
    24. })
    25. script>
    26. body>
    27. html>

    2.2 Element 布局

    网站: 

    Element - The world's most popular Vue UI framework

    Element 提供了两种布局方式,分别是:

    • Layout 布局

    • Container 布局容器

    2.2.1 Layout 局部

    通过基础的 24 分栏,迅速简便地创建布局。也就是默认将一行分为 24 栏,根据页面要求给每一列设置所占的栏数。

    在左菜单栏找到 Layout 布局 ,点击 显示代码 ,在下面就会展示出对应的代码,显示出的代码中有样式,有html标签。

    将样式