Vue练习案例(中)

案例一:watch用法

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>表单变化,或某个值变化</title><script src="https://unpkg.com/vue@3/dist/vue.global.js"></script>
</head>
<!-- push pop尾部追加或移除;shift unshift头部追加或移除,splice分割 -->
<body><div id="Application"><div>{{type}} {{count}}</div><button @click="click">增加</button><button @click="jian">减少</button><input v-model="searchText" /></div>
</body>
<script>Vue.createApp({data() {return {count: 0,searchText:""}},computed:{type(){return this.count>5?"大":"小"}},watch:{searchText(newValue,old){this.count = newValue.lengthif(this.type == "大"){alert("文本太长")}}},methods: {click(){this.count = this.count+1;},jian(){this.count = this.count-1;}}}).mount("#Application");
</script>
</html>

案例二:表单绑定

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>表单变化,或某个值变化</title><script src="https://unpkg.com/vue@3/dist/vue.global.js"></script><style>.red {color: red;}.blue {color: blue;}</style>
</head>
<!-- push pop尾部追加或移除;shift unshift头部追加或移除,splice分割 -->
<body><div id="Application"><div>{{type}} {{count}}</div><button @click="click">增加</button><button @click="jian">减少</button><input v-model="searchText" /><textarea v-model="textareaT"></textarea><p style="white-space: pre-line;">多行文本内容:<br/>{{textareaT}}</p><input type="checkbox" v-model="singleCheck" value="足球" /><input type="checkbox" v-model="singleCheck" value="排球" /><p>{{singleCheck}}</p><input type="radio" v-model="qiu" value="足球2" /><input type="radio" v-model="qiu" value="排球1" /><p>{{qiu}}</p><select v-model="selectList" multiple><option>三国志</option><option>DNF</option><option>崩坏3</option></select><p :class="style">{{selectList}}</p></div>
</body>
<script>Vue.createApp({data() {return {count: 0,searchText:"",textareaT:"",singleCheck:[],qiu:"",selectList:[],style:{red: true,blue: false},}},computed:{type(){return this.count>5?"大":"小"}},watch:{searchText(newValue,old){this.count = newValue.lengthif(this.type == "大"){alert("文本太长")}},qiu(nv,oldv){if(nv == '排球1'){this.style.red = true;this.style.blue =false;}else{this.style.red = false;this.style.blue =true;}}},methods: {click(){this.count = this.count+1;},jian(){this.count = this.count-1;}}}).mount("#Application");
</script>
</html>

案例三:表单演练

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>表单变化,或某个值变化</title><script src="https://unpkg.com/vue@3/dist/vue.global.js"></script><style>.red {color: red;}.blue {color: blue;}.container {margin: 0 auto;margin-top: 70px;text-align: center;width: 300px;}.subTitle {color: gray;font-size: 14px;}.title {font-size: 45px;}.input {width: 90%;}.inputContainer {text-align: left;margin-bottom: 20px;}.subContainer {text-align: left;}.field {font-size: 14px;}.input {border-radius:6px;height: 25px;margin-top: 10px;border-color: silver;border-style: solid;background-color: cornsilk;}.tip {margin-top: 5px;font-size: 12px;color: gray;}.setting {font-size: 9px;color: black;}.label {font-size: 12px;margin-left: 5px;height: 20px;vertical-align: middle;}.checkbox {height: 20px;vertical-align: middle;}.btn {border-radius: 10px;height: 40px;width: 300px;margin-top: 30px;background-color: deepskyblue;border-color: blue;Color: white;}</style>
</head>
<!-- push pop尾部追加或移除;shift unshift头部追加或移除,splice分割 --><body><div class="container" id="app"><div class="container"><div class="subTitle">加入我们,一起创造美好世界</div><h1 class="title">创建你的账号</h1><div v-for="(item,index) in fields" class="inputContainer"><div class="field">{{item.title}}<span v-if="item.required" style="color:red">*</span><input class="input" :type="item.type" v-model="item.model" /><div class="tip" v-if="index==2">请确认密码长度大于6</div></div></div><div class="subContainer"><div class="setting">偏好设置</div><input class="checkbox" type="checkbox" /><label class="label">接受更新邮件</label></div><button @click="createAccount" class="btn">创建账号</button></div></div>
</body>
<script>Vue.createApp({data() {return {fields: [{title: "用户名",required: true,type: "text",model:""},{title: "邮箱地址",required: false,type: "text",model:""},{title: "密码",required: true,type: "password",model:""},]}},computed: {name: {get() {return this.fields[0].model},set(value){this.fields[0].model= value}},email: {get() {return this.fields[1].model},set(value){this.fields[1].model= value}},password: {get() {return this.fields[2].model},set(value){this.fields[2].model= value}}},methods: {emailCheck() { alert('email检查')},createAccount(){alert(`name=${this.name}`)}},}).mount("#app")
</script></html>

案例四:鼠标事件

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>表单变化,或某个值变化</title><script src="https://unpkg.com/vue@3/dist/vue.global.js"></script><style>body {margin: 0;padding: 0;}.container {margin: 0;padding: 0;/* position: absolute; */width: 440px;height: 440px;background-color: blanchedalmond;border-radius: 30px;z-index: 100;}.bail {position: absolute;width: 60px;height: 60px;left: 100px;top: 100px;background-color: red;border-radius: 30px;z-index: 100;}</style>
</head><body><div id ="move2"><div class="container" @mousemove.stop="move"><div class = "bail" :style="{left:offsetX+'px', top:offsetY+'px'}"></div></div></div><div id="app"><div @click="click">单击事件</div><div @dblclick="dblclick">双击事件</div><input @focus="focus" @blur="blur" @change="change" @select="select"></input><div @mousedown="mousedown">鼠标按下</div><div @mouseup="mouseup">鼠标抬起</div><div @mousemove="mousemove">鼠标移动</div><div @mouseout="mouseout" @mouseover="mouseover">鼠标移入移出</div><input @keydown="keydown" @keyup="keyup"></input><div @click.left="click">左键单击事件</div><div @click.right="click">右键单击事件</div><div @click.middle="click">中键单击事件</div></div></body>
<script>const App = {methods: {click() {console.log("单击事件");},dblclick() {console.log("双击事件");},focus() {console.log("获取焦点")},blur() {console.log("失去焦点")},change() {console.log("内容改变")},select() {console.log("文本选中")},mousedown() {console.log("鼠标按键按下")},mouseup() {console.log("鼠标按键抬起")},mousemove() {console.log("鼠标移动")},mouseout() {console.log("鼠标移出")},mouseover() {console.log("鼠标移入")},keydown() {console.log("键盘按键按下")},keyup() {console.log("键盘按键抬起")}}}app1 = Vue.createApp(App).mount("#app");Vue.createApp({data() {return {offsetX:0,offsetY:0}},methods:{move(event){if(event.clientX +30>440){this.offsetX = 440 -60}else if (event.clientX - 30 <0){this.offsetX = 0}else{this.offsetX = event.clientX-30}if(event.clientY +30>440){this.offsetY = 440 -60}else if (event.clientY - 30 <0){this.offsetY = 0}else{this.offsetY = event.clientY-30}}}}).mount("#move2");
</script></html>

案例五:键盘事件

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>表单变化,或某个值变化</title><script src="https://unpkg.com/vue@3/dist/vue.global.js"></script><style>body {margin: 0;padding: 0;}.container {position: relative;margin: 0 auto;width: 440px;height: 440px;background-color: blanchedalmond;}.ball {position: absolute;width: 30px;height: 30px;left: 0px;top: 0px;background-color: orange;border-radius: 30px;}.board {position: absolute;left: 0;bottom: 0;height: 10px;width: 80px;border-radius: 5px;background-color: red;}</style>
</head><body><div id="app"><!--游戏区域--><div class="container"><!--底部挡板--><div class="board" :style="{left: boardX + 'px'}"></div><!--弹球--><div class="ball" :style="{left: ballX+'px', top: ballY+'px' }"></div><!--游戏结束提示--><h1 v-if="fail" style="text-align: center;">游戏失败</h1></div></div>
</body>
<script>var app = {data() {return {// 挡板位置boardX: 0,// 球位置ballX: 0,ballY: 0,// 速度rateX: 0.1,rateY: 0.1,fail: false}},mounted() {this.enterKeyup();// 随即弹球速度和轨迹this.rateX = Math.random() + 0.1this.rateY = Math.random() + 0.1this.timer = setInterval(() => {if (this.ballX + this.rateX >= 440 - 30) {this.rateX *= -1}if (this.ballX + this.rateX <= 0) {this.rateX *= -1}if (this.ballY + this.rateY <= 0) {this.rateY *= -1}this.ballX += this.rateXthis.ballY += this.rateYif (this.ballY >= 440 - 30 - 10) {if (this.boardX <= this.ballX + 30 && this.boardX + 80 >= this.ballX) {// 反弹this.rateY *= -1} else {clearInterval(this.timer)this.fail = true}}}, 2)},methods: {keydown(event) {if (event.key == "ArrowLeft") {if (this.boardX > 10) {this.boardX -= 20}} else if (event.key == "ArrowRight") {if (this.boardX < 440 - 80) {this.boardX += 20}}},enterKeyup(){document.addEventListener("keydown", this.keydown)}},}Vue.createApp(app).mount("#app");
</script></html>

案例六:自定一组件-父子组件传值

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>表单变化,父子组件传值,传事件</title><script src="https://unpkg.com/vue@3/dist/vue.global.js"></script>
</head>
<body><div id="app"><!-- 父组件传值到子组件,子组件回传参数到父组件的事件 --><myalert-com @myclick="alert1" title="崩坏3" ><template #header>具名header插槽</template><template #foot>具名foot22插槽</template></myalert-com><myalert-com @myclick="alert2" title="DNF" ><template #foot>具名foot插槽</template></myalert-com><!-- 子组件传值到父组件 --><myinput-com v-model="modelValue1"></myinput-com><myinput-com v-model="modelValue2"></myinput-com><label for="myalert-com">myalert-com</label><input type="radio" value="myalert-com" v-model="page" /><label for="myinput-com">myinput-com/label><input type="radio" value="myinput-com" v-model="page" /><!-- 组件切换 --><component :is="page"></component></div>
</body>
<script>const App = Vue.createApp({data(){return {modelValue1:"input1",modelValue2:"input2",page:"myinput-com"}},methods:{alert1(var1,var2){alert("方法1,参数1="+var1+"参数2="+var2)},alert2(var1,var2){alert("方法2,参数1="+var1+"参数2="+var2)}},watch:{modelValue1(nv,ov){alert(nv+"__1__"+ov)},modelValue2(nv,ov){alert(nv+"__2__"+ov)}}})const alertCompent = {data(){return {msg:"警告提示",count:0}},computed:{countString:{get(){return this.count + "次"}}},methods:{click(){this.count +=1this.$emit('myclick', this.count, this.title)}},// 外部属性props:["title"],watch:{count(nv,oldv){console.log(nv, oldv)}},template:`<div><button @click="click">{{title}}按钮+1<slot name="header"></slot><slot name="foot"></slot></button></div>`}const inputCompent = {props:["modelValue"],methods:{action(event){this.$emit("update:modelValue", event.target.value)}},template:`<div><input :value="modelValue" @input="action" /></div>`}App.component("myalert-com", alertCompent)App.component("myinput-com", inputCompent)App.mount("#app")
</script></html>

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

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

相关文章

mac 0S中虚拟机分辨率高怎么办

在VMware Fusion安装的Windows虚拟机有时候会遇到下图的问题&#xff0c;分辨率很高、桌面和任务栏的图标都很小&#xff0c;没办法正常使用。 解决方法&#xff1a; 点击工具栏中的扳手图标&#xff0c;打开设置。 打开系统设置中的“显示器”。 取消勾选“使用Retina全分辨率…

找不到d3dx9_43.dll怎么解决,d3dx9_43.dll缺失的七种解决方法

​在计算机游戏领域&#xff0c;遇到“找不到d3dx9_43.dll”错误信息是一个相当普遍的现象。这一问题不仅影响玩家的游戏体验&#xff0c;还可能导致游戏无法启动或运行不稳定。本文旨在深入解析这一问题的原因&#xff0c;并提供有效的解决方法&#xff0c;帮助广大游戏玩家轻…

论文《基于现实迷宫地形的电脑鼠设计》深度分析(四)——现实迷宫算法

论文概述 《基于现实迷宫地形的电脑鼠设计 》是由吴润强、庹忠曜、刘文杰、项璟晨、孙科学等人于2023年发表的一篇优秀期刊论文。其针对现阶段电脑鼠计算量庞大且不适用于现实迷宫地形的问题&#xff0c;特基于超声波测距与传统迷宫算法原理&#xff0c;设计出一款可在现实…

ARM(安谋) China处理器

0 Preface/Foreword 0.1 参考博客 Cortex-M23/M33与STAR-MC1星辰处理器 ARM China&#xff0c;2018年4月established&#xff0c;独立运行。 1 处理器类型 1.1 周易AIPU 1.2 STAR-MC1&#xff08;星辰处理器&#xff09; STAT-MC1&#xff0c;主要为满足AIOT应用性能、功…

Iview DatePicker 仅允许选择当前月份及以后的月份

iview DatePicker之前月份禁用且下月可用 html代码 <DatePicker type"month" :options"options4" :value"dialogForm.estimatedStartTimeWithCreate" on-change"monthTime($event, loadDateStart)" placeholder"请选择时间&q…

Redis 内存管理

参考&#xff1a;面试官&#xff1a;为什么 Redis 不立刻删除已经过期的数据&#xff1f; 目录 1.Redis 给缓存数据设置过期时间有什么用&#xff1f; 2.Redis 是如何判断数据是否过期的呢&#xff1f; 3.Redis 过期 key 删除策略了解么&#xff1f; 4.大量 key 集中过期怎…

【IC每日一题:SVA简介】

IC每日一题&#xff1a;SVA简介 1 断言概念1.1 断言优势&#xff1b;1.2 断言类型1.2.1 立即断言1.2.2 并行断言1.2.3 并发断言Demo 2 SVA语法2.1 蕴含操作符&#xff1a;|-> 和 ->2.1.1 蕴含操作符 |>2.1.2 蕴含操作符|-> 2.2 延时操作符2.2.1 ##n 操作符 2.3 重复…

深度学习之One Stage目标检测算法2

我们将对单次目标检测器&#xff08;包括SSD系列和YOLO系列等算法&#xff09;进行综述。我们将分析FPN以理解多尺度特征图如何提高准确率&#xff0c;特别是小目标的检测&#xff0c;其在单次检测器中的检测效果通常很差。然后我们将分析Focal loss和RetinaNet&#xff0c;看看…

【MySQL】优化方向+表连接

目录 数据库表连接 表的关系与外键 数据库设计 规范化 反规范化 事务一致性 表优化 索引优化 表结构优化 查询优化 数据库表连接 表的关系与外键 表之间的关系 常见表关系总结 一对一关系&#xff1a;每一条记录在表A中对应表B的唯一一条记录&#xff0c;反之也是&a…

SHELL笔记(概念+变量)

shell 概念 Shell 是一个命令行解释器&#xff0c;它充当用户与操作系统内核之间的桥梁。用户在 Shell 环境下输入各种命令&#xff0c;Shell 负责接收并分析这些命令&#xff0c;然后将其转换为内核能够理解和执行的系统调用。通过这种方式&#xff0c;用户可以便捷地操作计算…

统信UOS开发环境支持Golang

UOS为Golang开发者提供了各种编辑器和工具链的支持,助力开发者实现高质量应用的开发。 文章目录 一、环境部署Golang开发环境安装二、代码示例Golang开发案例三、常见问题1. 包导入错误2. 系统资源限制一、环境部署 Golang开发环境安装 golang开发环境安装步骤如下: 1)安装…

web前端开发--盒子属性

1、设置背景图像固定 <!DOCTYPE html> <html><head><meta charset"UTF-8"><title>设置背景图像固定</title><style type"text/css">/*p{background-attachment: scroll;/*fixed固定*//*随元素滚动还是固定*/}&…

Python数据分析NumPy和pandas(三十五、时间序列数据基础)

时间序列数据是许多不同领域的结构化数据的重要形式&#xff0c;例如金融、经济、生态学、神经科学和物理学。在许多时间点重复记录的任何内容都会形成一个时间序列。许多时间序列是固定频率的&#xff0c;也就是说&#xff0c;数据点根据某些规则定期出现&#xff0c;例如每 1…

前端开发之打印功的使用和实例(vue-print-nb)

通过插件来进行实现 前言效果图1、安装插件vue2vue32、 引入Vue项目2、 使用2.1、在项目中创建按钮并且使用v-print绑定绑定打印事件2.2、编写要打印的内容,给内容附加唯一的id2.3、绑定的时间的方法和参数3、整体代码(此代码是通过vue3来进行实现的但是逻辑都是一样的)前言…

使用Web Animations API实现复杂的网页动画效果

&#x1f493; 博客主页&#xff1a;瑕疵的CSDN主页 &#x1f4dd; Gitee主页&#xff1a;瑕疵的gitee主页 ⏩ 文章专栏&#xff1a;《热点资讯》 使用Web Animations API实现复杂的网页动画效果 使用Web Animations API实现复杂的网页动画效果 使用Web Animations API实现复杂…

分享一个mysql-sql优化经验 in (xxx)的优化【 in(集合)改成not in(反集合) 】

一、优化前 如下sql&#xff0c;直接执行时间需要18.341秒 二、优化后 将 in(集合) 改成 not in(反集合)&#xff0c;如下图&#xff0c;执行性能提升至少4倍&#xff0c;需要4.643秒&#xff0c;并且查询结果不变 三、原因分析 为什么速度会变快那么多&#xff1f; in (集…

传感器页面、屏幕刷新任务学习

一、user_SensorPageTask 传感器页任务 ​ /* Private includes -----------------------------------------------------------*/ //includes #include "user_TasksInit.h" #include "user_ScrRenewTask.h" #include "user_SensorPageTask.h" …

BigQuery中jobUser和dataViewer的角色有什么不同

真题实战 Scenario: Your company utilizes BigQuery as the enterprise data warehouse, with data spread across multiple Google Cloud projects. Queries on BigQuery must be billed to a specific project, separate from where the data resides. Users should have q…

AWTK-WIDGET-WEB-VIEW 实现笔记 (3) - MacOS

MacOS 上实现 AWTK-WIDGET-WEB-VIEW 有点麻烦&#xff0c;主要原因是没有一个简单的办法将一个 WebView 嵌入到一个窗口中。所以&#xff0c;我们只能通过创建一个独立的窗口来实现。 1. 创建窗口 我对 Object-C 不熟悉&#xff0c;也不熟悉 Cocoa 框架&#xff0c;在 ChatGPT…

fiddler抓包24_App流量统计

​课程大纲 使用Fiddler可以实现“APP流量统计”功能。具体操作如下&#xff1a; ① 选中app所有请求&#xff0c;点击右侧菜单标签“Statistics”。 ② 查看请求统计数据&#xff0c;即APP流量统计&#xff1a;“Bytes Sent”&#xff08;发送的字节数&#xff09;、“Bytes R…