一周Spring Boot + VUE 入门(2) --VUE

发布于:2023-01-10 ⋅ 阅读:(446) ⋅ 点赞:(0)

前后端分离目前重要的前端技术是基于VUE技术的框架进行开发。

1、前后端分离的概念

Vue.js(读音 /vju?/, 类似于 view) 是一套构建用户界面的渐进式框架。Vue 只关注视图层, 采用自底向上增量开发的设计。Vue 的目标是通过尽可能简单的 API 实现响应的数据绑定和组合的视图组件

    这段话是我从网上贴过来的,大部分介绍VUE的文章都以这段话为开头。如果你第一次接触VUE,肯定会看得比较晕,如果你用过一段时间的VUE,回过头来看,可能比较容易理解。

~~~~~~  这里我说一下我的个人体会,你可以跳过,但是我希望还是能看一下,很值得  ~~~~~~~~ 

现在的应用大部分是B/S模式的,就是在网页上进行各类操作,例如购物、查看成绩、选课等,很少用C/S模式的应用,就是电脑上需要安装一个专用的软件,这个软件一般包括菜单和下面的各个操作页面,数据需要联网从远程读取到本地。有点类似我们电脑上安装的QQ软件,如果你用网页版的QQ,对比一下你就能知道体验的差别了。我非常怀念早期的C/S管理软件,数据查询和操作非常流畅,不像B/S方式每一页闪一下,感觉特别慢。但是B/S软件也有自己的优势,客户端用浏览器,什么软件也不用安装,系统修改和升级在服务器端,用户不用升级本地的软件,所以才打败了C/S方式,成为主流的软件模式。

     当你厌倦了B/S方式的慢条斯理,尤其是数据量很大的时候,是否也怀念以前的C/S模式,海量数据上下一拉,随意浏览,真叫痛快。

    你使用过VUE以后,就能体会到,VUE真是一个绝妙的创造。这个多说一句VUE的作者尤雨溪,大学专业是室内艺术和艺术史,硕士是美术设计和技术。在读硕士期间,他偶然接触到了JavaScript ,被这门编程语言深深吸引,开发了一个前端开发库Vue.js。说明计算机编程是多么美妙,兴趣在其中起到很大的作用,即使你的专业不是计算机,也不妨碍在兴趣推定下,你也能做出意想不到的成绩,顺便也帮你完成养家糊口的任务,甚至是财务自由。

   所以如何让软件学习者感受到软件技术的魅力,是一个重要的任务。因此,我们这个系列教程的思路,就是尽快用简短的方式让大家入门,然后尽快能让大家做出点什么,就是所谓的“Learning by Doing” ,通过“做中学”的方式来学习,可能起到更好的效果。

    扯得有点远了,让我们回归主题。VUE的出现,让我们在浏览器上实现了古老的C/S模式,就是所谓的B/S模式下的C/S模式实现。B/S模式是在客户端和服务器之间传递的是HTML页面,VUE在浏览器和服务器之间传递的是单纯的数据,页面是在浏览器上根据接收到的数据“画”出来的,这样就具有快速、流畅的体验,而避免了B/S模式的页面闪动。是否是跟以前的C/S模式非常类似,只是在浏览器上实现的,这样就巧妙避免了客户端电脑上安装软件这个C/S方式的很大的缺陷。

    前后端分离还有一个比较大的背景,由于手机对流量非常敏感(那都是真金白银啊),所以APP同服务器尽量传递最有用的数据,就是页面放到APP到装到用户端的手机上,APP页面上的数据从服务器获取,这样就最大限度节省流量。所以随着移动APP的发展,PC端从服务器端获取完成的动态页面(HTML),手机APP只获取数据,那要开发两套服务器端,非常麻烦。在这个大的背景下,PC端的页面设计也发生了变化,将前后端分离,前端只在服务器端读取数据,而页面部分由前端单独提供,就是现在的前后端分离的模式。

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

   上面说这么多,只为了给大家解释一个概念,这个概念我认为很重要,否则你感觉VUE真是莫名其妙。VUE的页面分为两个主要的部分,一个是视图模板部分,就是将来显示出来成为页面给别人看到的部分,一个是数据部分,就是从服务器读取数据,以及对数据进行各种处理的部分,这部分不是给别人看的,是辅助视图模板部分,把数据在模板试图的相应位置显示数据,让模板视图成为有内容的页面。

   上面这段话有点专业,能不一定能理解,我给你举个例子。我们去教务处办理成绩单申请offer。工作的流程是服务窗口的老师去成绩岗位的老师办公室,把你的成绩单打印好以后盖章,拿到服务窗口给你,如果每天有50人申请成绩单,服务窗口的老师就需要来回跑50趟去拿完整的打印好的成绩单(这就是目前B/S方式,客户端和服务器端来回传输的是完整的HTML页面,数据和页面都在服务器端生成好,通过网络传到客户端的浏览器上显示)。后来服务窗口的老师突发奇想,我比照成绩单做一个模板文件,模板上需要填写姓名、专业、成绩的地方做个标记,然后有同学来申请成绩单,我打电话去成绩岗老师,只把个人信息和成绩这些数据要过来,在窗口把数据代替对应模板上的标记,直接在窗口打印盖章不就行了吗,为什么非要过去拿这个完整的成绩单呢?(这就是VUE实现的前后端分离,模板视图下载到客户端后,如果视图不变,只有数据变化,就可以只从服务器端获取数据,改变模板视图上的数据对应的标记就可以实现不同数据的页面了)。比如咱们学校很大,原来成绩岗老师打印成绩单,一天最多打印50份,现在放到服务窗口,我可以多设置服务窗口,成绩岗老师如果只提供数据,那一天是否就能办理好几个50份了?(这就是前后端分离项目可以应付更高的并发量,因为服务端只提供数据)。同学们在服务窗口也不会感觉到服务的老师一会在,一会离开的现象,而是一直在工作(前后端分离页面的流畅性更好)。

   如果你能坚持看到此处还没有晕的话,再返回头看看第一段那些比较唬人的专业人士说的话,是否对视图层,数据绑定这些概念有点理解了。下面让我们通过第一个VUE页面进行体验上面讲的这些概念。

2、第一个VUE页面-- Hello World!

新建一个目录demo1,右键,打开[cmder here],打开命令窗口

首先我们安装一下cnpm,这样速度快一些

npm i -g cnpm --registry=https://registry.npm.taobao.org

 提示已经可以使用cnpm淘宝镜像了。

输入以下命令,安装vue脚手架构建工具

cnpm install -g vue-cli

输入以下命令,初始化一个项目vueDemo1

vue init webpack vueDemo1

其中webpack是构建工具,demo1是项目文件夹的名称,这个文件夹会自动生成

有提示,就是默认就可以,最终提示

表示创建成功了。

然后命令行进入vueDemo1目录  cd vueDemo1 

再运行   npm run dev

看到这个提示,就表示已经在本机的8080端口运行了。

 打开浏览器,地址栏输入

http://localhost:8080

就能看到我们创建VUE页面运行的结果了。

我们打开我们创建项目的目录vueDemo1,大概了解一下结构

我们的VUE源代码就在src中,这个目录也是我们将来经常关注的目录。

~~~下面的内容稍微有点难理解,我希望你还是能看一下,也可以跳过,过段时间再来看~~~

进入src,我们看一下目录结构

assets 文件夹:里面主要放置一些不变的资源文件。比如图片,样式css 之类的文件

components 文件夹:组件文件夹,vue项目经常使用大量的组件,有别人写好的,也有自己写的,例如著名的echat画图表的组件,让你的程序瞬间高大上,实现数据可视化。

router 文件夹:是vue项目的路由。为什么需要路由,因为vue 是单页面应用,不使用在浏览器打开新页面这种操作,所以流畅性好。所有的页面都是在浏览器的一个页面转来转去,这里面就是设置转移的所有页面的地址,这样可以通过地址就可以在不同的页面之间前后转换。 。

app.vue 文件 :这个文件是整个项目的入口文件,可以说进入系统的第一个页面。

main.js 文件 :全局的使用的各种变量、js、插件都在这里引入 、定义,带来的好处是这里定义了,其他地方就不用再定义了,但是注意是需要很多地方都用到的在这里定义,单个页面用到的,在单个页面上再定义,不要在这里定义。

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

打开components目录,用记事本(sublime或者notepad更好)打开HelloWorld.vue文件

 把里面的内容清空,修改成下面这样

<template>
  <div class="hello">
    <h1>{{ msg }}</h1>

  </div>
</template>

<script>
export default {
  name: 'HelloWorld',
  data () {
    return {
      msg: 'Hello World!'
    }
  }
}
</script>

保存一下,浏览器上的页面会自动更新成下面这样

这就是我们的第一个VUE程序,Hello World!

我们下载一个图标放到assets目录下,代替logo.png ,感受一下assets目录的作用。

下面让我们分析一下VUE文件的结构。

上面部分是视图模板,以<template>开始,以</template>结束,内容用HTML语句编辑我们需要显示的内容,需要显示数据的地方,用{{ 变量名 }} 标记。

下面的部分是数据处理部分,以javascript语句编写,数据是在data部分的return中定义。你可以看到上面视图模板中有个meg变量,下面的数据部分初始化了这个变量是字符串“Hello World”,你可以修改一下这个字符串,看看浏览器的效果。

下面让我们做一下我们上面说的成绩单,先做一个成绩单的模板,这样

<template>
  <div >
    <h1>{{ name }} 同学成绩单</h1>
      {{ name }}同学,系我学校{{ major}} 专业学生,平均成绩为: {{ score}},特此证明!
  </div>
</template>

然后数据部分,这样定义

<script>
export default {
  name: 'score',
  data () {
    return {
      name: '张三',
      major: '计算机科学与技术',
      score: 75
    }
  }
}
</script>

把文件保存到components目录下,我们起个名字叫score。

然后还要把路由指到score,而不是helloworls,进入router目录,打开index.js

 分别import引入我们的score组件,以及在路由routes中将网站的根"/"映射到这个组件score上,以前这些地方都是HelloWorld组件,现在要做对应的修改。然后保存,看一下浏览器,就成了这样的效果了。

 通过这个例子,你能否大致了解了VUE页面的设计思路和工作方法, 以及设计的巧妙之处,是显示和数据分离,通过做一个模板,只有数据改变,就可以显示不同的页面,无需去服务器端获取页面,只在服务器端获取数据,在浏览器上根据不同的数据根据模板“绘制”页面,这样实现浏览器上的C/S模式的工作,是不是很奇妙的设计。

下面让我们用一个模板显示若干个同学的成绩单

首先,我们用<div> ...  </div>标签把我们模板中需要重复显示的部分前后包起来,里面放一个vue的循环结构  v-for="student in students",就是说重复取变量叫students的数组变量的一个元素,这个元素我们起个名字叫student(注意不是students),直到数据的最后一个数值。然后在刚才数据显示的位置,修改成【元素.成员】这样的形式。

然后数据部分修改成数组

 注意数组是用"[   ]"前后起止的。数组中的元素用"{   }"起止。这样students就包括了三个同学的成绩。整个vue页面如下:

<template>
  <div>
    <div  v-for="student in students">
      <h1>{{ student.name }} 同学成绩单</h1>
        {{ student.name }}同学,系我学校{{ student.major}} 专业学生,平均成绩为: {{ student.score}},特此证明!
    </div>
  </div>
</template>

<script>
export default {
  name: 'score',
  data () {
    return {
       students :[
          { 
            name: '张三',
            major: '计算机科学与技术',
            score: 75
           },

           { 
            name: '李四',
            major: '通信工程',
            score: 80
           },
           { 
            name: '王五',
            major: '电子工程',
            score: 30
           },
     
        ]
     
    }
  }
}
</script>

保存一下,到浏览器观看,应该是这样的效果

 如果我们想把低于60分的同学的成绩显示不及格,这样如何处理呢?采用VUE的v-if和v-else

 注意,vue的条件要放到一对HTML标签中,我们选择了HTML的字体加粗标签strong,注意前后要配对<strong>....</strong>。这样我们添加了两个strong标签对,第一个加v-if,第二个加v-else,第一个满足条件显示,第二个不满足条件显示,最终的效果就成了这样

 完整的代码如下:

<template>
  <div>
    <div  v-for="student in students">
      <h1>{{ student.name }} 同学成绩单</h1>
        {{ student.name }}同学,系我学校{{ student.major}} 专业学生,平均成绩为: 
        <strong v-if ="student.score <60"> 不及格 </strong><strong v-else> {{ student.score}}</strong>,
        特此证明!
    </div>
  </div>
</template>

<script>
export default {
  name: 'score',
  data () {
    return {
       students :[
          { 
            name: '张三',
            major: '计算机科学与技术',
            score: 75
           },

           { 
            name: '李四',
            major: '通信工程',
            score: 80
           },
           { 
            name: '王五',
            major: '电子工程',
            score: 30
           },
     
        ]
     
    }
  }
}
</script>

VUE语法还有很多,你可以参考网上的教程,例如菜鸟教程 Vue.js 教程 | 菜鸟教程慢慢自己练习。我非常喜欢菜鸟教程,也向制作这个网站的无私奉献致敬。

 VUE入门今天就到这里,如果你能理解VUE的视图模板和数据配合的设计原理,就是最大的成功了,后续就会理解我们要讲的很多前端为什么要这样做。

本节的代码在

https://gitee.com/W2970/oneweek/tree/master

可以下载到,麻烦顺便帮我点赞

 感谢感谢。

本文含有隐藏内容,请 开通VIP 后查看

网站公告

今日签到

点亮在社区的每一天
去签到