001 vue
https://cn.vuejs.org/
文章目录
- v-bind
- v-model
- v-on
- 修饰符
- 条件渲染/控制:v-if v-show
- 列表渲染
M:即Model,模型,包括数据和一些基本操作
V:即View,视图,页面渲染结果
VM:即View-Model,模型与视图间的双向操作(无需开发人员干涉)
在MVVM前,开发人员从后端获取需要的数据模型,然后要通过DOM操作Model渲染到View中。而后当用户操作视图,还需要通过DOM获取View中的数据,然后同步到Model中。
而MVVM中的VM要做的事情就是把DOM操作完全封装起来,开发人员不再关心Model和View之间是如何互相影响的
只要Model发生了改变,View上自然会表现出来
当用户修改了View,Model中的数据也会跟着改变。。。
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>vue快速入门</title>
</head>
<body><div id="app"><!--1.{{message}}:插值表达式2. message 就是从model的data数据池来设置3. 代码执行时,会到data{}数据池中去匹配数据,如果匹配上,就进行替换,如果没有匹配上,就输出空--><h1>欢迎你{{message}}--{{name}}</h1></div><!--引入vue.js--><script src="vue.js"></script><script>//创建Vue对象/*** 1.创建Vue对象实例**/let vm = new Vue({el: "#app", //创建的vue实例挂载到 id=app的divdata: { //data{} 表示数据池(model有了数据),以k-v形式设置(根据需要设置)message: "Hello-Vue",name: "xd"}})console.log(vm._data.message);console.log(vm._data.name);console.log(vm.message);console.log(vm.name);</script></body>
</html>
注意代码顺序,要求div在前,script在后,否则无法绑定数据
Vue.js采用简洁的模板语法来声明式地将数据渲染进DOM的系统,做到数据和显示分离
Vue没有繁琐的DOM操作,如果使用jQuery,我们需要先找到div节点,获取到DOM对象,然后进行节点操作,显然Vue更加简洁
v-bind
v-bind指令可以完成基本数据渲染/绑定
v-bind简写形式就是一个冒号(:)
插值表达式是用在标签体的
如果给标签属性绑定值,则使用v-bind指令
<!DOCTYPE html>
<html lang="en" xmlns:v-bind="http://www.w3.org/1999/xhtml">
<head><meta charset="UTF-8"><title>单向数据渲染</title>
</head>
<body><div id="app"><h1>{{message}}</h1><!--1.使用插值表达式引用data数据池数据是在标签体内2.如果在标签/元素的属性上引用data数据池数据时,不能使用插值表达式,需要使用v-bind--><img v-bind:src="img_src" v-bind:width="img_width"><img v-bind:src="img_src" v-bind:width="img_width">
</div><script src="vue.js"></script>
<script>let vm = new Vue({el: "#app", //创建的vue实例挂载到 id=app的divdata: { //data{} 表示数据池(model有了数据),以k-v形式设置(根据需要设置)message: "hello",img_src: "1.png",img_width: "200px"}})</script>
</body>
</html>
v-model
v-model可以完成双向数据绑定
<!DOCTYPE html>
<html lang="en" xmlns:v-bind="http://www.w3.org/1999/xhtml">
<head><meta charset="UTF-8"><title>双向数据渲染</title>
</head>
<body>
<div id="app"><h1>{{message}}</h1><!--1.v-bind是数据单向渲染:data数据池绑定的数据变化,会影响view2.v-model="hobby.val" 是数据的双向渲染,(1)data数据池绑定的数据变化,会影响view(2)view关联的元素值变化,会影响data数据池的数据--><input type="text" v-model="hobby.val"><br /><input type="text" v-bind:value="hobby.val"><br /><p>你输入的爱好是:{{hobby.val}}</p>
</div><script src="vue.js"></script>
<script>let vm = new Vue({el: "#app", //创建的vue实例挂载到 id=app的divdata: { //data{} 表示数据池(model有了数据),以k-v形式设置(根据需要设置)message: "hi,输入你的爱好",hobby: {val: "购物"}}})</script>
</body>
</html>
v-on
使用v-on进行事件处理,比如:v-on:click表示处理鼠标点击事件
事件调用的方法定义在vue对象声明的methods节点中
v-on:事件名 可以绑定指定事件
如果方法没有参数,可以省略()[需要浏览器支持]
v-on指定的简写形式 @[需要浏览器支持]
查看可以绑定的事件
<!DOCTYPE html>
<html lang="en" xmlns:v-on="http://www.w3.org/1999/xhtml">
<head><meta charset="UTF-8"><title>事件处理</title>
</head>
<body>
<!--视图-->
<div id="app"><h1>{{message}}</h1><!--1.v-on:click 表示给button元素绑定一个click的事件2.sayHi()表示绑定的方法,在方法池methods{}定义的--><button onclick="sayHi()">点击输出</button><button v-on:click="sayOk()">点击输出</button><button>点击输出</button><button>点击输出</button>
</div>
<!--引入vue.js-->
<script src="vue.js"></script>
<!--创建一个vue实例,并挂载到id=app的div-->
<script>let vm = new Vue({el: "#app", //创建的vue实例挂载到 id=app的divdata: { //data{} 表示数据池(model有了数据),以k-v形式设置(根据需要设置)message: "Vue事件处理的案例",name: "xd"},//是一个methods属性,对应的值是对象//在{}中,可以写很多的方法methods: {sayHi() {console.log("hi,1");},sayOk() {console.log("ok,2");}}})
</script>
</body>
</html>
修饰符
修饰符(Modifiers)是以(.)指明的后缀,指出某个指令以特殊方式绑定。
在事件处理程序中调用event,preventDefault()或event.stopPropagation()。
Vue.js为v-on提供了事件修饰符。
.stop
.prevent
.capture
.self
.once
.passive
<!DOCTYPE html>
<html lang="en" xmlns:v-on="http://www.w3.org/1999/xhtml">
<head><meta charset="UTF-8"><title>Vue修饰符使用</title>
</head>
<body>
<div id="app"><!--1. 修饰符用于指出一个指令应该以特殊方式绑定。2. v-on:submit.prevent的.prevent 修饰符表示阻止表单提交的默认行为3. 执行 程序员指定的方法--><form action="http://www.baidu.com" v-on:submit.prevent="onMySubmit">妖怪名: <input type="text" v-model="monster.name"><br/><br/><button type="submit">注册</button></form><p>服务返回的数据是{{count}}</p><h1>修饰符扩展案例</h1><button v-on:click.once="onMySubmit">点击一次</button><br/><input type="text" v-on:keyup.enter="onMySubmit"><input type="text" v-on:keyup.down="onMySubmit"><input type="text" v-model.trim="count">
</div>
<script src="vue.js"></script>
<script>let vm = new Vue({el: '#app',data: {//数据池monster: {//monster数据(对象)的属性, 可以动态生成},count: 0},methods: {//方法池onMySubmit() {//console.log("我们自己的表单提交处理...");//"", null, undefined都是falseif(this.monster.name) {console.log("提交表单 name=", this.monster.name);//这里,程序员就可以根据自己的业务发出ajax请求到后端//得到数据后,在进行数据更新this.count = 666;} else {this.count = 0;console.log("请输入名字..");}}}})
</script>
</body>
</html>
条件渲染/控制:v-if v-show
Vue提供了v-if和v-show条件指令完成条件渲染/控制
v-if会确保在切换过程中,条件块内的事件监听器和子组件销毁和重建
v-show机制相对简单,不管初始条件是什么,元素总是会被渲染,并且只是对CSS进行切换
使用建议:如果要频繁地切换,建议使用v-show;如果运行时条件很少改变,使用v-if较好
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>条件渲染 v-if</title>
</head>
<body>
<div id="app"><!--这里还可以看到checkbox的 checked属性的值--><input type="checkbox" v-model="sel">是否同意条款[v-if实现]<!--v-if/v-else 会根据 返回的值,来决定是否动态创建对应的子组件 <h1>--><h1 v-if="sel">你同意条款</h1><h1 v-else>你不同意条款</h1>
</div>
<script src="vue.js"></script>
<script>//为了调试方便, 使用vm接收Vue实例let vm = new Vue({el: '#app',data: {//data数据池sel: false}})
</script>
</body>
</html>
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>条件渲染 v-show</title>
</head>
<body>
<div id="app"><!--这里还可以看到checkbox的 checked属性的值--><input type="checkbox" v-model="sel">是否同意条款[v-show实现]<h1 v-show="sel">你同意条款</h1><h1 v-show="!sel">你不同意条款</h1>
</div>
<script src="vue.js"></script>
<script>//为了调试方便, 使用vm接收Vue实例let vm = new Vue({el: '#app',data: {//data数据池sel: false}})
</script>
</body>
</html>
列表渲染
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>v-for 列表渲染</title>
</head>
<body>
<div id="app"><!--基本语法:<li v-for="变量 in 数字">{{ 变量 }}</li>--><h1>简单的列表渲染</h1><ul><li v-for="i in 3">{{i}}</li></ul><!--基本语法:<li v-for="(变量, 索引) in 值">{{ 变量 }} - {{ 索引 }}</li>--><h1>简单的列表渲染-带索引</h1><ul><li v-for="(i,index) in 3">{{i}}-{{index}}</li></ul><h1>遍历数据列表</h1><!-- 语法:<tr v-for="对象 in 对象数组"><td>{{对象的属性}}</td></tr>--><table width="400px" border="1px"><tr v-for="(monster,index) in monsters"><td>{{index}}</td><td>{{monster.id}}</td><td>{{monster.name}}</td><td>{{monster.age}}</td></tr></table>
</div>
<script src="vue.js"></script>
<script>new Vue({el: '#app',data: { //数据池monsters: [{id: 1, name: '牛魔王', age: 800},{id: 2, name: '黑山老妖', age: 900},{id: 3, name: '红孩儿', age: 200}]}})
</script>
</body>
</html>
相关文章:
001 vue
https://cn.vuejs.org/ 文章目录 v-bindv-modelv-on修饰符条件渲染/控制:v-if v-show列表渲染 M:即Model,模型,包括数据和一些基本操作 V:即View,视图,页面渲染结果 VM:即View-Mode…...
css动态设置div宽高,calc函数
在css中使用calc函数 calc() 是 CSS 中的一种函数,用于动态计算长度值。它允许你在 CSS 属性中进行数学运算,结合不同的单位(如 px、%、em 等),从而创建更加灵活和响应式的布局 表达式规则 运算符:支持加…...
MySQL篇(四)事务相关知识详解
MySQL篇(四)事务相关知识详解 MySQL篇(四)事务相关知识详解一、事务的特性(ACID)原子性(Atomicity)一致性(Consistency)隔离性(Isolation)持久性(…...
React 项目使用 pdf.js 及 Elasticpdf 教程
摘要:本文章介绍如何在 React 中使用 pdf.js 及基于 pdf.js 的批注开发包 Elasticpdf。简单 5 步可完成集成部署,包括数据的云端同步,示例代码完善且简单,文末有集成代码分享。 1. 工具库介绍与 Demo 1.1 代码包结构 ElasticP…...
性能测试之jmeter的基本使用
简介 Jmeter是Apache的开源项目,基于Java开发,主要用于进行压力测试。 优点:开源免费、支持多协议、轻量级、功能强大 官网:https://jmeter.apache.org/index.html 安装 安装步骤: 下载:进入jmeter的…...
CAD插件实现:所有文字显示到列表、缩放、编辑——CAD-c#二次开发
当图中有大量文字,需要全部显示到一个列表时并缩放到需要的文字时,可采用插件实现,效果如下: 附部分代码如下: private void BtnSelectText_Click(object sender, EventArgs e){var doc Application.DocumentManager.…...
【Git】“warning: LF will be replaced by CRLF”的解决办法
一、原因分析 不同操作系统的换行符标准不同: • Windows:使用 CRLF(\r\n)表示换行; • Linux/Mac:使用 LF(\n)表示换行 Git 检测到本地文件的换行符与仓库设置或目标平台不兼容时…...
vue2(13) 组件注册的学习笔记
文章目录 Vue2 组件注册学习笔记一、组件注册的基本概念二、全局注册三、局部注册四、组件名的命名规范五、在模块系统中注册组件六、基础组件的自动化全局注册七、总结Vue2 组件注册学习笔记 一、组件注册的基本概念 在Vue中,组件是可复用的Vue实例,具有封装的模板和逻辑。…...
【spring Cloud Netflix】OpenFeign组件
1.概述 Feign旨在使编写Java Http客户端变得更容易。前面在使用RibbonRestTemplate进行服务的远程调用 时,利用RestTemplate对Http请求的封装处理,形成了一套模板化的调用方法。但是在实际开发中,由 于对服务的依赖调用可不止一处࿰…...
go游戏后端开发20:房间消息推送处理
创建房间逻辑前的概念梳理及代码实现 在编写创建房间的逻辑之前,我们需要先创建几个关键概念。 第一个概念是“联盟”。联盟可以理解为一个组织,它持有多个房间。一个联盟下可能挂载多个房间,这是我们的第一个概念。 第二个概念是“管理”…...
Oracle数据库数据编程SQL<8 文本编辑器Notepad++和UltraEdit(UE)对比>
首先,用户界面方面。Notepad是开源的,界面看起来比较简洁,可能更适合喜欢轻量级工具的用户。而UltraEdit作为商业软件,界面可能更现代化,功能布局更复杂一些。不过,UltraEdit支持更多的主题和自定义选项&am…...
Linux驱动开发练习案例
1 开发目标 1.1 架构图 操作系统:基于Linux5.10.10源码和STM32MP157开发板,完成tf-a(FSBL)、u-boot(SSBL)、uImage、dtbs的裁剪; 驱动层:为每个外设配置DTS并且单独封装外设驱动模块。其中电压ADC测试,采用linux内核…...
Windows程序中计时器WM_TIMER消息的使用
本文章是对《Windows程序设计》这本书第八章计时器的总结,如果有时间,可以去看书里的讲解,如果时间不充裕,想马上知道计时器该如何使用,欢迎阅读本文,本文已经将计时器的干货整理完毕! 什么是计…...
Apache httpclient okhttp(1)
学习链接 Apache httpclient & okhttp(1) Apache httpclient & okhttp(2) httpcomponents-client github apache httpclient文档 apache httpclient文档详细使用 log4j日志官方文档 【Java基础】- HttpURLConnection…...
微信小程序—路由
关于 app.json 中的配置 app.json 主要是对整个小程序进行一个全局的配置。 pages:在这个配置项目中,就可以配置小程序里面的页面,小程序默认显示 pages 数组中的第一个页面windows:主要配置和导航栏相关的 当然,在…...
人工智能驱动的数据仓库优化:现状、挑战与未来趋势
1. 引言:数据仓库的演进与人工智能驱动优化的兴起 现代数据仓库的复杂性和规模正以前所未有的速度增长,这主要是由于数据量、种类和产生速度的急剧增加所致。传统的数据仓库技术在应对这些现代数据需求方面显得力不从心,这催生了对更先进解决…...
LVS高可用负载均衡
一、项目图 二、主机规划 主机系统安装应用网络IPclientredhat 9.5无NAT192.168.72.115/24lvs-masterredhat 9.5ipvsadm,keepalivedNAT192.168.72.116/24 VIP 192.168.72.100/32lvs-backupredhat 9.5ipvsadm,keepalivedNAT192.168.72.117/24 VIP 192.168…...
脑影像分析软件推荐 | JuSpace
目录 1. 软件界面 2.工具包功能简介 3.软件安装注意事项 参考文献: Dukart J, Holiga S, Rullmann M, Lanzenberger R, Hawkins PCT, Mehta MA, Hesse S, Barthel H, Sabri O, Jech R, Eickhoff SB. JuSpace: A tool for spatial correlation analyses of magne…...
集合框架——常用类
集合框架的理解 就是一个常用类 集合主要有三种类型【集合与集合之间可以互转】 List(列表,是接口)Set(集合,是接口)Map(键值对,是接口)Collection是以上及所有集合的根接口,其里面的子类,一部分支持集合有序元素可重复,一部分支持集合无序元素不重复 可重复和不…...
【NLP 面经 7、常见transformer面试题】
目录 1. 为何使用多头注意力机制? 2. Q和K使用不同权重矩阵的原因 3. 选择点乘而非加法的原因 4. Attention进行scaled的原因 5. 对padding做mask操作 6. 多头注意力降维原因 7. Transformer Encoder模块简介 8. 乘以embedding size的开方的意义 9. 位置编码 10. 其…...
分布式事务解决方案全解析:从经典模式到现代实践
前言 在分布式系统中,数据一致性是一个核心问题。随着微服务架构的普及,跨服务、跨数据库的操作变得越来越普遍,如何保证这些操作的原子性、一致性、隔离性和持久性(ACID)成为了一个极具挑战性的任务。本文将全面介绍…...
软件工程面试题(二十七)
1、j a v a 对象初始化顺序 1.类的初始化(initialization class & interface) 2.对象的创建(creation of new class instances) 顺序:应为类的加载肯定是第一步的,所以类的初始化在前。大体的初始化顺序是: 类初始化 -> 子类构造函数 -> 父类构造函数 -&g…...
fastGPT—nextjs—mongoose—团队管理之部门相关api接口实现
创建部门或者子部门 import type { NextApiRequest, NextApiResponse } from next; import { NextAPI } from /service/middleware/entry; import { MongoOrgModel } from fastgpt/service/support/permission/org/orgSchema;async function handler(req: NextApiRequest, res…...
C++ 数据竞态检查
-fsanitizethread 编译时,添加参数-fsanitizethread -g,可以运行态检查数据竞态问题,包括: 数据竞态死锁锁、条件变量错误使用 check_tsan 开源库 yalantinglibs有段检查编译器是否支持 fsanitize 编译参数的宏,挺…...
逛好公园的好处
逛公园和软件开发看似是两个不同的活动,但它们之间存在一些有趣的关联和相互促进的关系: 激发创造力:公园中的自然景观、多样的人群以及各种活动能为开发者带来新的灵感和创意。软件开发过程中,从公园中获得的创意可以帮助开发者设…...
C++开发工具全景指南
专业编译与调试工具深度解析 2025年4月 编译器套件 GNU Compiler Collection (GCC) GNU编译器套件是自由软件基金会开发的跨平台编译器系统,支持C、C、Objective-C、Fortran、Ada等多种编程语言。作为Linux系统的标准编译器,GCC以其强大的优化能力和…...
【网络安全】 防火墙技术
防火墙是网络安全防御的重要组成部分,它的主要任务是阻止或限制不安全的网络通信。在这篇文章中,我们将详细介绍防火墙的工作原理,类型以及如何配置和使用防火墙。我们将尽可能使用简单的语言和实例,以便于初学者理解。 一、什么…...
文档的预解析
1. 预解析的核心目标 浏览器在正式解析(Parsing)HTML 前,会启动一个轻量级的 预解析器(Pre-Parser),快速扫描文档内容,实现: 提前发现并加载关键资源(如 CSS、JavaScrip…...
理解“功能内聚”
链接: 理解“偶然内聚” 理解“逻辑内聚” 理解“时间内聚” 理解“过程内聚” 理解“通信内聚” 理解“顺序内聚” 理解“功能内聚” 功能内聚(Functional Cohesion)是最高级别的内聚形式,指的是模块内的所有元素都紧密地围绕着一…...
windows 常用命令总结
工作中用到的 Linux 总结(持续更新中...)_linux工作经验-CSDN博客 PS: 推荐使用 powershell 而不是 cmd,因为PowerShell 是一个更先进和功能更强大的工具( powershell 有命令记忆功能,比较方便)…...
