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>

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

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

相关文章

Tomcat 负载均衡

目录 二、Tomcat Web Server 2.1 Tomcat 部署 2.1.1 Tomcat 介绍 2.1.2 Tomcat 安装 2.2 Tomcat 服务管理 2.2.1 Tomcat 启停 2.2.2 目录说明 2.2.3编辑主页 2.3 Tomcat管理控制台 2.3.1开启远程管理 2.3.2 配置远程管理密码 三、负载均衡 3.1 重新编译Nginx 3.1.1 确…

使用SpringSecurity下,发生重定向异常

使用SpringSecurity下&#xff0c;发生空转异常 环境信息&#xff1a; Spring Boot 3.4.4 &#xff0c; jdk 17 &#xff0c; springSecurity 6.4.4 问题背景&#xff1a; 没有自定义controller &#xff0c;改写了login 页面&#xff0c;并且进行了成功后的跳转处理&#xf…

S130N-ISI 全栈方案与云平台深度协同:重构 PLC 开发新范式

一、什么是 PLC&#xff1f; 1.技术定义 PLC&#xff08;Power Line Communication&#xff09;是一种创新的通信技术&#xff0c;它以电力线作为天然的传输介质&#xff0c;通过先进的信号调制技术将高频数据信号叠加于工频电流之上&#xff0c;实现电力输送与数据通信的双频共…

SU-YOLO:基于脉冲神经网络的高效水下目标检测模型解析

论文地址:https://arxiv.org/pdf/2503.24389 目录 一、论文概述 二、创新点解析 1. 基于脉冲的水下图像去噪(SpikeDenoiser) 原理与结构 2. 分离批归一化(SeBN) 原理与结构 3. 优化的残差块(SU-Block) 原理与结构 三、代码复现指南 环境配置 模型训练 四、…

实现阿里云服务器上的文字聊天程序以及C语言写的进程间通信(IPC)程序

实现阿里云服务器上的文字聊天程序以及C语言写的进程间通信&#xff08;IPC&#xff09;程序 1. 基于 Linux 中的管道进行进程间通信 我们首先使用管道进行进程间通信&#xff0c;这对于简单的聊天程序来说是一个比较简单且实用的方法。 步骤&#xff1a; 创建管道&#xf…

COMSOL 与人工智能融合的多物理场应用:28个案例的思路、方法与工具概述

应用案例概述 基于 COMSOL 与人工智能&#xff08;AI&#xff09;结合的应用案例涵盖了 28 个多领域场景&#xff0c;包括工程&#xff08;如热传导优化、结构力学预测&#xff09;、能源&#xff08;如电池热管理、燃料电池性能&#xff09;、生物医学&#xff08;如药物传递…

SAN及其ZONE

目录 一、什么是SAN? 二、什么是ZONE? 三、配置ZONE 2.1 核心概念 2.2 划分原则 2.3 Zone划分最佳实践 2.4 配置语法 1). 基于端口&#xff08;Domain,Port&#xff09;的zone语法 2). 基于WWN&#xff08;World Wide Name&#xff09;的Zone语法 3). 使用Alias简化配置 4).…

Springboot框架—单元测试操作

Springboot单元测试的操作步骤&#xff1a; 1.添加依赖spring-boot-starter-test 在pom.xml中添加依赖spring-boot-starter-test 2.在src/test/java下新建java class 3.单元测试入口代码结构 import org.junit.Test; import org.junit.runner.RunWith; import org.springfra…

用AbortController取消事件绑定

视频教程 React - &#x1f914; Abort Controller 到底是什么神仙玩意&#xff1f;看完这个视频你就明白了&#xff01;&#x1f4a1;_哔哩哔哩_bilibili AbortController的好处之一是事件绑定的函数已无需具名函数,匿名函数也可以被取消事件绑定了 //该代码2秒后点击失效…

JavaScript性能优化(上)

1. 减少 DOM 操作 减少 DOM 操作是优化 JavaScript 性能的重要方法&#xff0c;因为频繁的 DOM 操作会导致浏览器重绘和重排&#xff0c;从而影响性能。以下是一些具体的策略和技术&#xff0c;可以帮助有效减少 DOM 操作&#xff1a; 1.1. 批量更新 DOM 亲切与母体&#xff…

OpenCV 图形API(14)用于执行矩阵(或图像)与一个标量值的逐元素乘法操作函数mulC()

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 描述 将矩阵与标量相乘。 mulC 函数将给定矩阵 src 的每个元素乘以一个给定的标量值&#xff1a; dst ( I ) saturate ( src1 ( I ) ⋅ multiplier ) \…

持续集成与Jenkins安装使用教程

一、持续集成与Jenkins 持续集成&#xff08;Continuous integration&#xff0c;简称CI&#xff09;指的是&#xff0c;频繁地&#xff08;一天多次&#xff09;将代码集成到主干。 持续集成的目的&#xff0c;就是让产品可以快速迭代&#xff0c;同时还能保持高质量。 它的…

TIM定时器

一、TIM定时器 STM32高级定时器实战&#xff1a;PWM、捕获与死区控制详解-CSDN博客 玩转STM32_rivencode的博客-CSDN博客 二、相关函数 1.TIM_TimeBaseInitTypeDef结构体讲解 typedef struct {uint16_t TIM_Prescaler; // 预分频器&#xff0c;用于设置定时器计数频…

Python 小练习系列 | Vol.14:掌握偏函数 partial,用函数更丝滑!

&#x1f9e9; Python 小练习系列 | Vol.14&#xff1a;掌握偏函数 partial&#xff0c;用函数更丝滑&#xff01; 本节的 Python 小练习系列我们将聚焦一个 冷门但高能 的工具 —— functools.partial。它的作用类似于“函数的预设模板”&#xff0c;能帮你写出更加灵活、优雅…

开源 PDF.js 文件编辑操作

一、PDF.js PDF.js 是 Mozilla 基金会推出的一个使用 HTML5 构建的 PDF 阅读器&#xff0c;它完全使用 JavaScript 编写。作为 Firefox 浏览器的默认 PDF 查看器&#xff0c;PDF.js 具有强大的兼容性和稳定性。它不仅支持 PDF 文件的查看和渲染&#xff0c;还提供了丰富的交互…

3D珠宝渲染用什么软件比较好?渲染100邀请码1a12

印度珠宝商 Mohar Fine Jewels 和英国宝石商 Gemfields 在今年推出了合作珠宝系列——「Emeralds in Full Bloom」&#xff0c;它的灵感源自花草绽放的春季田野&#xff0c;共有 39 件作品&#xff0c;下面这个以植物为主题的开口手镯就是其中一件。 在数字时代&#xff0c;像这…

增益调度控制 —— 理论、案例与交互式 GUI 实现

目录 增益调度控制 —— 理论、案例与交互式 GUI 实现一、引言二、增益调度控制的基本原理三、数学模型与公式推导四、增益调度控制的优势与局限4.1 优势4.2 局限五、典型案例分析5.1 案例一:航空飞行控制中的增益调度5.2 案例二:发动机推力控制中的增益调度5.3 案例三:化工…

PyTorch数据加载流程解析

1. 定义最简单的Dataset import torch from torch.utils.data import Dataset, DataLoaderclass MyDataset(Dataset):def __init__(self, data):self.data data # 假设data是一个列表&#xff0c;如[10, 20, 30, 40]def __len__(self):return len(self.data) # 返回数据总量…

xsync脚本是一个基于rsync的工具

xsync脚本是一个基于rsync的工具&#xff0c;用于在集群间高效同步文件或目录。以下是xsync脚本的详细使用方法和配置步骤&#xff1a; 一、xsync脚本的作用 xsync脚本可以快速将文件或目录分发到集群中的多个节点&#xff0c;避免了手动逐台复制文件的繁琐操作。它利用rsync…

250408_解决加载大量数据集速度过慢,耗时过长的问题

250408_解决加载Cifar10等大量数据集速度过慢&#xff0c;耗时过长的问题&#xff08;加载数据时多线程的坑&#xff09; 在做Cifar10图像分类任务时&#xff0c;发现每个step时间过长&#xff0c;且在资源管理器中查看显卡资源调用异常&#xff0c;主要表现为&#xff0c;显卡…