不会Vue的Java程序员不是好的架构师

简介: 从事web开发的技术工程师,不再只是单纯的只会后端语言技术就可以了,还需要掌握前端知识,做一些常用的页面开发,尤其是在一些企业应用管理系统中。前端技术从最初的html/css/javascript 到jsp/jquery/ajax再到现在流行的vue/angular/react等。工作中有幸学习到vue技术开发,结合工作心得以及参考网络资料学习特整理此文章,作为vue开发的一些心得体会和总结吧。

01前言


从事web开发的技术工程师,不再只是单纯的只会后端语言技术就可以了,还需要掌握前端知识,做一些常用的页面开发,尤其是在一些企业应用管理系统中。前端技术从最初的html/css/javascript 到jsp/jquery/ajax再到现在流行的vue/angular/react等。工作中有幸学习到vue技术开发,结合工作心得以及参考网络资料学习特整理此文章,作为vue开发的一些心得体会和总结吧。

02VUE简介


2.1 什么是vue?

vue是一套构建用户界面的渐进式框架,它采用自底向上增量开发的设计。vue 的核心库只关注视图层,不仅易于上手,还便于与第三方库或既有项目整。

渐进式表现:声明式渲染—组件系统—客户端路由—大数据状态管理—构建工具。

2.2 模板引擎

模板引擎大概是 Vue 里最主要、又最核心的一个能力。前面也讲到,在模板引擎还没有出现的时候,前端需要手动更新前端页面的内容,需要维护一大堆的 HTML 和变量拼接的动态内容,虽然 jQuery 的出现提升了 DOM 元素的操作性,但依然难以避免代码的可读性、可维护性上存在的一些问题。

以前我们更新页面的内容,大概的流程是:监听操作 -> 获取数据变量 -> 使用数据拼接成 HTML 模板 -> 将 HTML 内容塞到页面对应的地方 -> 将 HTML 片段内需要监听的点击等事件进行绑定。

这么复杂的逻辑,如今使用 Vue,就可以方便地在模板里用插值表达式{{}}、v-bind绑定变量来展示,同时配合v-if、v-for这些内置指令,就可以很方便地写出可读性和维护性都很不错的代码了。什么是插值表达式?什么是指令?这些我们会放在后面的章节里介绍。这里我们主要来介绍下 Vue 框架做了什么事情,这里先讲一下数据绑定。

在 Vue 里渲染一块内容,一般会有以下流程:

(1) 解析语法生成 AST。

(2) 根据 AST 结果,完成 data 数据初始化。

(3) 根据 AST 结果和 data 数据绑定情况,生成虚拟 DOM。

(4) 将虚拟 DOM 生成真正的 DOM 插入到页面中,此时页面会被渲染。

03VUE环境搭建


3.1 方式

前端使用 Vue 框架有两种方式:

(1) 简单的页面,可以通过<script>引入 CDN 资源来使用。

(2) 从项目可维护和拓展性上看,搭建本地调试环境来构建 Vue 项目会更合适。

3.2 直接引入 CDN

在前端页面中引入一段 Javascript 代码片段,直接引入 CDN 的方式来使用 Vue

<!-- 参考 code/2/1-import-cdn.html 文件 --><!DOCTYPE html><html lang="en-US">  <head>    <meta charset="utf-8" />    <meta name="viewport" content="width=device-width,initial-scale=1" />    <title>Vue直接引入Script资源</title>    <!-- 引入 CDN 资源 -->    <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>  </head>  <body>    <div id="app">{{ message }}</div>    <script>      // 初始化 Vue 实例      new Vue({        el: "#app",        data() {          return {            message: "欢迎来到Vue的世界"          };        }      });</script>  </body></html>

浏览器在解析了 Vue 框架的代码并执行之后,我们通过new Vue()启动了一个 Vue 根实例,而<div id="app"></div>中使用双括号{{}}绑定的message变量也被替换成了对应的值。

3.3 Vue CLI 脚手架

使用 Vue 框架,脚手架一般会优先选择官方提供的 Vue CLI,Vue CLI 其实也是基于 Webpack 封装的便捷脚手架。

有了脚手架,我们可以通过简单的命令就能快速生成 Demo 代码、构建本地测试环境、编译和打包代码、发布到现网等等功能。

// 安装脚手架npm install -g @vue/cli// 脚手架生成 vue 项目,同时会自动安装依赖vue create vue-cli-demo

生成之后的代码目录:

c0704530df839e338ec2990cda22b054_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png

3.4 启动项目

使用npm来运行启动项目,npm run serve来运行。一般来说,开发环境是dev、serve等,生产环境是build,scripts里是一些任务,运行命令 npm run dev/serve就可以启动了。

15d89f2f7f3b3770a25556f5c4d77324_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png

这里以笔者本地启动的项目为例,运行命令 npm run dev后访问输出的地址(这里是http://localhost:9200/或者 http://192.168.1.101:9200/)就能看到本地的项目跑起来了。

04VUE常用组件的使用


4.1 注册方式

为了能在模板中使用,这些组件必须先注册以便 Vue 能够识别。Vue 中有两种组件的注册类型:全局注册和局部注册。

4.1.1 全局注册

全局注册可以通过Vue.component()的方式进行,该方法第一个参数要传入组件的名称,第二个参数传入该组件的选项:


Vue.component("my-button", {  // 选项  // 除了 el 以外,组件的选项与 Vue 实例相同});

4.1.2 局部注册

局部注册可通过在实例中的components选项进行配置:

// 获取组件import MyComponent from "../components/my-button";
new Vue({  components: { MyComponent }});

而以这种方式使用组件的时候,则需要在组件里通过name选项进行命名:

// my-button.vuenew Vue({  name: "my-button"});

这种方式定义的组件,如果也进行了全局注册,其命名会以全局注册的名字为准,也就是全局注册的命名优先级更高。

4.2 单文件组件

一个组件是一些逻辑和功能完整的代码片段组成的,同时也包括了 HTML、CSS 和 Javascript 的代码。在 Vue 里,我们常常使用单文件组件,使用.vue 后缀命名的文件,一般也包括这三部分:

<template>  <!-- 组件模板 --></template>
<script>  // 组件逻辑  // 在.vue文件中,需要默认export一个Vue实例  export default {    name: "MyComponent"  };</script>
<style>  /* 组件样式 */</style>

05组件间通信


5.1 Prop 数据传递

我们会将部分的代码抽象成组件,是因为该部分的内容在别处也有使用到,而抽象成组件,可以提供更简单的复用方式。例如常用的按钮,我们可以对它进行封装。在 Vue 实例的选项中,我们可以用一个props选项将其包含在该组件可接受的 prop 列表中:

<template>  <button    class="my-button"    @click="handleClick"    :disabled="disabled || loading"    :type="type"    :class="[      type ? 'my-button--' + type : '',      buttonSize ? 'my-button--' + buttonSize : '',      {        'is-disabled': disabled,        'is-loading': loading      }    ]"  >    <i class="el-icon-loading" v-if="loading"></i>    <i :class="icon" v-if="icon && !loading"></i>    <span v-if="$slots.default"><slot></slot></span>  </button></template><script>  export default {    name: "MyButton",    props: {      // 按钮类型,如info、warn、error等      type: {        type: String,        default: "default"      },      // icon类型,匹配样式      icon: {        type: String,        default: ""      },      loading: Boolean, // 是否在加载中      disabled: Boolean // 是否不可用    },
    methods: {      // 点击触发click事件      handleClick(evt) {        this.$emit("click", evt);      }    }  };</script>

可以看到,该组件封装了按钮类型、图标和状态,通过 prop 提供给外部配置使用。Prop 是我们可以在组件上注册的一些自定义特性,常常用于接收来自父组件的数据/属性值,我们可以直接在需要的地方使用:

<my-button>原按钮</my-button><!-- 可以像这样给 prop 传入一个静态的值 --><my-button type="info" icon="config">提示样式按钮(带管理图标)</my-button><!-- 也可以通过 v-bind 动态赋值 --><my-button type="info" :loading="true">提示样式按钮(加载中)</my-button><my-button type="error" :disabled="true">错误样式按钮(不可用)</my-button>

一个组件默认可以拥有任意数量的 prop,任何值都可以传递给任何 prop。

5.2 父子组件通信

所有的 prop 都使得其父子 prop 之间形成了一个单向下行绑定:父级 prop 的更新会向下流动到子组件中,但是反过来则不行。除了父组件给子组件传递数据之外,有时候我们也需要在子组件中和父级组件进行沟通。

在 Vue 中,父级组件可以像处理原生的 DOM 事件一样通过v-on监听子组件实例的任意事件:

<my-button @click="handleClick">自定义按钮</my-button>

06常用指令


6.1 v-if 系列

<div v-if="type === 'A'">Type A</div><div v-else-if="type === 'B'">Type B</div><div v-else>Default Type</div>


6.2 key

<div v-for="item in items" v-bind:key="item.id">  <!-- 内容 --></div>


6.3 表单绑定 v-model

v-model指令在表单<input>、<textarea>及<select>元素上创建双向数据绑定。实际上v-model是语法糖,它负责监听用户的输入事件以更新数据,并对一些极端场景进行一些特殊处理。

使用 Tips

当v-model使用在多选或者选择框上时,需要注意的是:

(1) 多选时,v-model会绑定到一个数组。

(2) 对于单选按钮,复选框及选择框的选项,v-model绑定的值通常是静态字符串。

(3) 复选框可以使用true-value和false-value来设置绑定的值。

<!-- 当选中时,`picked` 为字符串 "a" --><input type="radio" v-model="picked" value="a" />
<!-- `toggle` 为 true 或 false --><input type="checkbox" v-model="toggle" /><!-- `toggle` 为 'yes' 或 'no' --><input type="checkbox" v-model="toggle" true-value="yes" false-value="no" />
<!-- 当选中第一个选项时,`selected` 为字符串 "abc" --><select v-model="selected">  <option value="abc">ABC</option></select>

07总结


以上介绍了vue的基本知识,从基本介绍到环境搭建和通信方式到常用指令,了解这些基本知识可以对vue前端开发技术有了更清晰的认识和更深入的理解。

相关文章
|
5天前
|
Java 程序员 图形学
程序员教你用代码制作飞翔的小鸟--Java小游戏,正好拿去和给女神一起玩
《飞扬的小鸟》Java实现摘要:使用IntelliJ IDEA和JDK 16开发,包含小鸟类`Bird`,处理小鸟的位置、速度和碰撞检测。代码示例展示小鸟图像的加载、绘制与旋转。同时有`Music`类用于循环播放背景音乐。游戏运行时检查小鸟是否撞到地面、柱子或星星,并实现翅膀煽动效果。简单易懂,可直接复制使用。
|
17天前
|
设计模式 Java API
Java 可扩展 API 设计:打造灵活的应用架构
【4月更文挑战第27天】设计可扩展的 API 是构建灵活、易于维护的应用程序架构的关键。Java 提供了丰富的工具和技术来实现这一目标,使开发者能够构建具有高度可扩展性的应用程序。
39 4
|
3天前
|
JavaScript 前端开发 Java
java项目的打包将vue放到.jar里面部署
java项目的打包将vue放到.jar里面部署
|
5天前
|
缓存 Java 程序员
关于创建、销毁对象⭐Java程序员需要掌握的8个编程好习惯
关于创建、销毁对象⭐Java程序员需要掌握的8个编程好习惯
关于创建、销毁对象⭐Java程序员需要掌握的8个编程好习惯
|
5天前
|
前端开发 Java 关系型数据库
Java医院绩效考核系统源码B/S架构+springboot三级公立医院绩效考核系统源码 医院综合绩效核算系统源码
作为医院用综合绩效核算系统,系统需要和his系统进行对接,按照设定周期,从his系统获取医院科室和医生、护士、其他人员工作量,对没有录入信息化系统的工作量,绩效考核系统设有手工录入功能(可以批量导入),对获取的数据系统按照设定的公式进行汇算,且设置审核机制,可以退回修正,系统功能强大,完全模拟医院实际绩效核算过程,且每步核算都可以进行调整和参数设置,能适应医院多种绩效核算方式。
27 2
|
6天前
|
数据库连接
java+ssm+vue代码视频学习讲解
java+ssm+vue代码视频学习讲解
8 0
|
6天前
|
消息中间件 Java 微服务
Java微服务架构实践指南
Java微服务架构实践指南
20 0
|
9天前
|
缓存 NoSQL Java
构建高性能微服务架构:Java后端的实践之路
【5月更文挑战第5天】在当今快速迭代和高并发需求的软件开发领域,微服务架构因其灵活性、可扩展性而受到青睐。本文将深入探讨如何在Java后端环境中构建一个高性能的微服务系统,涵盖关键的设计原则、常用的框架选择以及性能优化技巧。我们将重点讨论如何通过合理的服务划分、高效的数据存储策略、智能的缓存机制以及有效的负载均衡技术来提升整体系统的响应速度和处理能力。
|
15天前
|
安全 Java 开发者
构建高效微服务架构:后端开发的新范式Java中的多线程并发编程实践
【4月更文挑战第29天】在数字化转型的浪潮中,微服务架构已成为软件开发的一大趋势。它通过解耦复杂系统、提升可伸缩性和促进敏捷开发来满足现代企业不断变化的业务需求。本文将深入探讨微服务的核心概念、设计原则以及如何利用最新的后端技术栈构建和部署高效的微服务架构。我们将分析微服务带来的挑战,包括服务治理、数据一致性和网络延迟问题,并讨论相应的解决方案。通过实际案例分析和最佳实践的分享,旨在为后端开发者提供一套实施微服务的全面指导。 【4月更文挑战第29天】在现代软件开发中,多线程技术是提高程序性能和响应能力的重要手段。本文通过介绍Java语言的多线程机制,探讨了如何有效地实现线程同步和通信,以及如
|
19天前
|
存储 安全 Java
Java程序员必须掌握的数据结构:HashMap
HashMap底层原理实现是每个Java Boy必须掌握的基本技能,HashMap也是业务开发每天都需要遇到的好伙伴。如此基础且核心的底层数据结构,JDK也给其赋予了线程安全的功能,我们来看看~
39 2
Java程序员必须掌握的数据结构:HashMap