Java课题笔记~ VUE

news2024/11/15 8:49:25

1.1 概述

Vue 是一套前端框架,免除原生JavaScript中的DOM操作

我们之前也学习过后端的框架 Mybatis

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

 

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

基于MVVM(Model-View-ViewModel)思想,实现数据的双向绑定,将编程的关注点放在数据上。之前我们是将关注点放在了 DOM 操作上;而要了解 MVVM 思想,必须先聊聊 MVC 思想,如下图就是 MVC 思想图解

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

 MVC 思想是没法进行双向绑定的。双向绑定是指当数据模型数据发生变化时,页面展示的会随之发生变化,而如果表单数据发生变化,绑定的模型数据也随之发生变化。接下来我们聊聊 MVVM 思想,如下图是三个组件图解

 图中的 Model 就是我们的数据,View 是视图,也就是页面标签,用户可以通过浏览器看到的内容;ModelView 是通过 ViewModel 对象进行双向绑定的,而 ViewModel 对象是 Vue 提供的。接下来让大家看一下双向绑定的效果,下图是提前准备的代码,输入框绑定了 username 模型数据,而在页面上也使用 {{}} 绑定了 username 模型数据

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

 

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

1.2 快速入门

Vue 使用起来是比较简单的,总共分为如下三步:

1、新建 HTML 页面,引入 Vue.js文件

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

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

new Vue({
    el: "#app",
    data() {
        return {
            username: ""
        }
    }
});

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

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

  • data :用来定义数据模型

  • methods :用来定义函数。这个我们在后面就会用到

3、编写视图

<div id="app">
    <input name="username" v-model="username" >
    {{username}}
</div>

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

整体代码如下:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<div id="app">
    <input v-model="username">
    <!--插值表达式-->
    {{username}}
</div>
<script src="js/vue.js"></script>
<script>
    //1. 创建Vue核心对象
    new Vue({
        el:"#app",
        data(){  // data() 是 ECMAScript 6 版本的新的写法
            return {
                username:""
            }
        }

        /*data: function () {
            return {
                username:""
            }
        }*/
    });

</script>
</body>
</html>

1.3 Vue 指令

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

常用的指令有:

 

1.3.1 v-bind & v-model 指令

 

1、v-bind

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

例如:

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

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

<!--
	v-bind 可以省略
-->
<a :href="url">百度一下</a>

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

 

 

2、v-model

该指令可以给表单项标签绑定模型数据。这样就能实现双向绑定效果。例如:

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

 代码演示:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<div id="app">
    <a v-bind:href="url">点击一下</a>
    <a :href="url">点击一下</a>
    <input v-model="url">
</div>

<script src="js/vue.js"></script>
<script>
    //1. 创建Vue核心对象
    new Vue({
        el:"#app",
        data(){
            return {
                username:"",
                url:"https://www.baidu.com"
            }
        }
    });
</script>
</body>
</html>

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

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

3、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 属性中定义出来

new Vue({
    el: "#app",
    methods: {
        show(){
            alert("我被点了");
        }
    }
});

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

例如:

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

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

整体页面代码如下:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<div id="app">
    <input type="button" value="一个按钮" v-on:click="show()"><br>
    <input type="button" value="一个按钮" @click="show()">
</div>
<script src="js/vue.js"></script>
<script>
    //1. 创建Vue核心对象
    new Vue({
        el:"#app",
        data(){
            return {
                username:"",
            }
        },
        methods:{
            show(){
                alert("我被点了...");
            }
        }
    });
</script>
</body>
</html>

4、v-if

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

//1. 创建Vue核心对象
new Vue({
    el:"#app",
    data(){
        return {
            count:3
        }
    }
});

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

<div id="app">
    <div v-if="count == 1">div1</div>
    <div v-else-if="count == 2">div2</div>
    <div v-else>div3</div>
    <hr>
    <input v-model="count">
</div>

整体页面代码如下:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<div id="app">
    <div v-if="count == 3">div1</div>
    <div v-else-if="count == 4">div2</div>
    <div v-else>div3</div>
    <hr>
    <input v-model="count">
</div>

<script src="js/vue.js"></script>
<script>
    //1. 创建Vue核心对象
    new Vue({
        el:"#app",
        data(){
            return {
                count:3
            }
        }
    });
</script>
</body>
</html>

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

<div v-show="count == 3">div v-show</div>
<br>
<input v-model="count">

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

 通过上面的演示,发现 v-showv-if 效果一样,那它们到底有什么区别呢?我们根据浏览器的检查功能查看源代码

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

5、 v-for

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

<标签 v-for="变量名 in 集合模型数据">
    {{变量名}}
</标签>

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

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

<标签 v-for="(变量名,索引变量) in 集合模型数据">
    <!--索引变量是从0开始,所以要表示序号的话,需要手动的加1-->
   {{索引变量 + 1}} {{变量名}}
</标签>

代码演示:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<div id="app">
    <div v-for="addr in addrs">
        {{addr}} <br>
    </div>

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

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

    //1. 创建Vue核心对象
    new Vue({
        el:"#app",
        data(){
            return {
                addrs:["北京","上海","西安"]
            }
        }
    });
</script>
</body>
</html>

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

 

1.4 生命周期

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

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

 

这些钩子方法我们只关注 mounted 就行了。

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/907963.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

6.链路追踪-Zipkin

链路追踪&#xff08;Distributed Tracing&#xff09;是一种用于监视分布式应用程序的技术&#xff0c;通过收集和展示分布式系统中不同组件之间的调用和交互情况&#xff0c;帮助开发人员和运维团队理解系统中的请求流程、性能瓶颈和异常情况。 1.Zipkin Zipkin 是一个开源的…

商户注册——异常处理

2.4.5 异常处理 2.4.5.1 异常信息格式 系统在交互中难免会有异常发生,前端为了解析异常信息向用户提示定义了异常信息的返回格式,如下: 1、返回response状态说明 状态码说明200成功401没有权限500程序错误(需要自定义错误体)2、自定义错误体 {"errCode": &qu…

matlab使用教程(20)—插值基础

1.网格和散点样本数据 插值是在位于一组样本数据点域中的查询位置进行函数值估算的方法。函数值是根据最接近查询点的样本数据点计算的。MATLAB 根据样本数据的结构&#xff0c;可以执行两种插值。样本数据可以形成网格&#xff0c;也可以是分散的。 网格化的样本数据使得插值…

1688批发工厂商品详情数据接口、商品采集接口(标题、详情、价格、主图)

接口背景 阿里巴巴(1688.com)是全球企业间(B2B)电子商务的著名品牌,为数千万网商提供海量商机信息和便捷安全的在线交易市场,也是商人们以商会友、真实互动的社区平台。供应商在该平台上展示和销售各类商品&#xff0c;而买家可以根据自己的需求选择合适的商品进行采购。为了提…

嵌入式糊涂蛋--基础恢复

2023年8月21日&#xff0c;距离找工作还有约365天。 现阶段状态&#xff1a;嵌入式各相关原理遗忘较大&#xff0c;嵌入式相关项目较少。机器学习、强化学习、数学规划等算法知识学得杂乱。 嵌入式学习路线 图片来源于公众号CodeSheep 图片来源于公众号CodeSheep 图片来源…

CSS 小技能(一):HTML 两个图片竖着平铺、设置图片点击、设置滚动条颜色

下面的代码没有考虑响应式的效果&#xff0c;如果考虑的话还需要一些代码进行处理。 【注】当时写的时候仅考虑了 webkit 内核的浏览器&#xff0c;如果是 IE 或者其他浏览器&#xff0c;请增加额外的 CSS 样式进行控制。 <!DOCTYPE html> <html> <head>&l…

YZ系列工具:YZ07:VBA对工作簿事件的监听

【分享成果&#xff0c;随喜正能量】善心善行的你&#xff0c;利己利他&#xff0c;积累无量福德&#xff0c;菩萨常伴左右&#xff0c;保佑一生平安&#xff0c; 财运亨通&#xff0c;福禄双收。身如逆流船&#xff0c;心比铁石坚。。 我给VBA下的定义&#xff1a;VBA是个人小…

微星笔记本暑促好货多多,开学季选购看这里!

随着即将到来的学期的临近&#xff0c;学生族如何选择一款称手的笔记本&#xff0c;就提上了日程。各种产品定位取向&#xff0c;各种价格范围&#xff0c;如果没有明确自己的需求和预算&#xff0c;就有点不知所措了~OK&#xff0c;今天就让我们从需求&预算出发&#xff0…

代码随想录(三) 哈希表

哈希表&#xff1a; 1.有效的字母异位词 用数组 class Solution { public:bool isAnagram(string s, string t) {int record[26] {0};for(int i 0; i < s.size(); i) {record[s[i] - a];} for(int i 0; i < t.size(); i) {record[t[i] - a]--;}for(int i 0; i <…

SDXL:Improving latent diffusion models for high-resolution image synthesis

文生图模型之SDXL - 知乎之前的文章 文生图模型之Stable Diffusion已经介绍了比较火的文生图模型Stable Diffusion&#xff0c;近期Stability AI又发布了新的升级版本SDXL。目前SDXL的代码、模型以及技术报告已经全部开源&#xff1a;官方代码&#xff1a;https://github.…htt…

灰鸽子远程控制病毒实验

一、实验目的&#xff1a; 1、掌握经典远控木马的原理 2、掌握“灰鸽子”木马的使用方法 二、预备知识&#xff1a; “灰鸽子”是现在网络上非常流行的一种木马&#xff0c;由两部分组成&#xff0c;一是控制端&#xff08;主程序&#xff09;&#xff0c;一是服务端&…

第19集丨Vue 江湖 —— ref属性

目录 一、多个单闭合组件标签二、ref属性三、小技巧 一、多个单闭合组件标签 下面案例中&#xff0c;多个单闭合标签<School/> &#xff0c;如果在非脚手架环境下只会显示第一个&#xff0c;但是在脚手架环境中&#xff0c;都会显示出来。 <template><div id&q…

手写 Mybatis-plus 基础架构(工厂模式+ Jdk 动态代理统一生成代理 Mapper)

这里写目录标题 前言温馨提示手把手带你解析 MapperScan 源码手把手带你解析 MapperScan 源码细节剖析工厂模式Jdk 代理手撕脚手架&#xff0c;复刻 BeanDefinitionRegistryPostProcessor手撕 FactoryBean代理 Mapper 在 Spring 源码中的生成流程手撕 MapperProxyFactory手撕增…

(排序) 剑指 Offer 51. 数组中的逆序对 ——【Leetcode每日一题】

❓剑指 Offer 51. 数组中的逆序对 难度&#xff1a;困难 在数组中的两个数字&#xff0c;如果前面一个数字大于后面的数字&#xff0c;则这两个数字组成一个逆序对。输入一个数组&#xff0c;求出这个数组中的逆序对的总数。 示例 1: 输入: [7,5,6,4] 输出: 5 限制&#xff…

测试框架pytest教程(9)自定义命令行-pytest_addoption

pytest_addoption pytest_addoption是pytest插件系统中的一个钩子函数&#xff0c;用于向pytest添加自定义命令行选项。 在pytest中&#xff0c;可以使用命令行选项来控制测试的行为和配置。pytest_addoption钩子函数允许您在运行pytest时添加自定义的命令行选项&#xff0c;…

十、接口(3)

本章概要 接口适配接口字段 初始化接口中的字段 接口嵌套接口和工厂方法模式 接口适配 接口最吸引人的原因之一是相同的接口可以有多个实现。在简单情况下体现在一个方法接受接口作为参数&#xff0c;该接口的实现和传递对象则取决于方法的使用者。 因此&#xff0c;接口的…

Mac发现有的软件不能上网的破解之法

1、Mac上打开终端 terminal &#xff0c;获取 root 权限。 sudo -i 2、编辑 hosts 文件 vim /private/etc/hosts 3、找到被禁止软件的数据请求域名&#xff0c;然后删除相关行&#xff0c;快捷件dd&#xff0c;然后:wq保存退出 比如百度 127.0.0.1 pan.baidu.com ##sec 印…

两个字符串的删除操作——力扣583

class Solution {public:int minDistance(string word1, string word2) {int m = word1.length(), n=word2

内网穿透实战应用-windows搭建WebDAV服务,并内网穿透公网访问【无公网IP】

windows搭建WebDAV服务&#xff0c;并内网穿透公网访问【无公网IP】 文章目录 windows搭建WebDAV服务&#xff0c;并内网穿透公网访问【无公网IP】1. 安装IIS必要WebDav组件2. 客户端测试3. cpolar内网穿透3.1 打开Web-UI管理界面3.2 创建隧道3.3 查看在线隧道列表3.4 浏览器访…

opencv-gpu版本编译(添加java支持,可选)实现硬解码

目录 opencv gpu版本编译&#xff0c;实现硬解码&#xff0c;加速rtsp视频流读取1、准备文件2、复制 NVCUVID 头文件到 cuda 安装目录 include3、安装相关依赖4、 执行cmake5、编译安装6、测试 opencv gpu版本编译&#xff0c;实现硬解码&#xff0c;加速rtsp视频流读取 前置条…