vue列表渲染-v-for指令,vue事件处理,数据双向绑定,表单控制

es6对象语法

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title><script src="./js/vue.js"></script>
</head>
<body></body>
<script>// es6对象写法// 1.基础写法var userinfo={'username':'lyz','age':18}console.log(userinfo)// 2.省略key的引号var userinfo={'username':'lyz','age':18}console.log(userinfo)// 3.对象中直接放变量var name='lyz'var age=18var userinfo={name,age}console.log(userinfo)// 4.对象中方法var name='lyz'var age=18var userinfo={name,age,'showName':function () {console.log(name)console.log(this) // this 相当于当前实例对象console.log(this.name)}}userinfo.showName()// 5. 方法简写var showName=function () {console.log(this) // 如果不在实例对象内部,this就代指window对象,就是bom对象console.log('另一个取名字的方式:' + this.name)}showName()var name='lyz'var age=18var userinfo={name,age,showName}userinfo.showName()// 6.最终var name = 'lyz'var age = 18var userinfo={name,age,showName(){console.log(name)}}userinfo.showName()
</script>
</html>

列表渲染-v-for指令

v-for基本使用

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title><script src="./js/vue.js"></script>
</head>
<body>
<div id="app"><p v-for="item in names">{{item}}</p>
</div></body>
<script>var vm = new Vue({el: '#app',data: {names: ['老刘', '点多', '各个']},})
</script>
</html>

显示购物车案例

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title><script src="./js/vue.js"></script>
</head>
<body>
<div id="d1"><h1>购物车</h1><div v-if="goodsList.length==0">购物车什么都木有</div><table v-else><thead><tr><th>商品id</th><th>商品名字</th><th>商品数量</th><th>商品价格</th><th>商品图片</th></tr></thead><tbody><tr v-for="item in goodsList"><th>{{item.id}}</th><td>{{item.name}}</td><td>{{item.count}}</td><td>{{item.price}}</td><td><img :src="item.img" alt="" width="50px" height="50px"></td></tr></tbody></table><button @click="loadData">加载购物车</button>
</div>
</body>
<script>var vm = new Vue({el: '#d1',data: {goodsList: []},methods: {loadData() {this.goodsList = [{id: 1, name: '短裙', count: 2, price: 99, img: './img/1.png'},{id: 2, name: '短裤', count: 6, price: 88, img: './img/1.png'},{id: 3, name: '短袖', count: 3, price: 109, img: './img/1.png'},{id: 4, name: '卫衣', count: 1, price: 55, img: './img/1.png'},{id: 5, name: '黑丝', count: 200, price: 9.9, img: './img/1.png'},]}}})
</script>
</html>

v-for可以循环的类型

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title><script src="./js/vue.js"></script>
</head>
<body>
<div id="d1"><h1>循环数组</h1><ul><!--      vue循环数组值在前,索引在后--><li v-for="(item,index) in names">{{item}}---{{index}}</li></ul><h1>循环对象</h1><ul><!--        vue循环对象值在前,关键字在后--><li v-for="(value,key) in userinfo">{{value}}---{{key}}</li></ul><h1>循环字符串</h1><ul><!--        vue循环字符串值在前,索引在后--><li v-for="(value,index) in s">{{value}}---{{index}}</li></ul><h1>循环数字</h1><ul><!--        vue循环数字值在前,索引在后--><li v-for="(item,index) in 10">{{item}}--->{{index}}</li></ul>
</div>
</body>
<script>var vm = new Vue({el: '#d1',data: {names: ['张三', '彭于晏', '迪丽热巴', 'lyz'],userinfo: {name: 'lyz', age: 18, hobby: '足球'},s: '学技术 养活自己',}})
</script>
</html>

js的循环方式

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title><script src="./js/vue.js"></script><script src="./js/jq.js"></script>
</head>
<body>
</body>
<script>// js的循环方式// 1. 基于索引的循环for (var i=0;i<10;i++){console.log(i)}// 2. in 循环// 2.1 循环数组var names=['lyz', '小红', '小黄']for (item in names){console.log(item)  //循环出的是索引console.log(names[item])  //取值}// 2.2 循环对象var userinfo={name:'lyz',age:18}for (item in userinfo){console.log(item)  //循环出的是keyconsole.log(userinfo[item])  //取值}// 2.3 循环字符串var s='学技术 养活自己'for (item in s){console.log(item)  //循环出的是索引console.log(s[item])}// 3. of 循环// 3.1 循环数组var names=['lyz', '小红', '小黄']for (item of names){console.log(item)  //循环出的是值}// 3.2 循环对象// 对象 不能用of循环// 3.3 循环字符串var s='学技术 养活自己'for (item of s){console.log(item)  //循环出的是值}// 3.3 循环数字// 数字 不能用of循环// 4 数组的方法,实现循环var names=['lyz', '小红', '小黄']names.forEach(function (value,index) {console.log(index)console.log(value)})var userinfo = {'name': 'lyz', 'age': 18}  // 没有循环方法// 5 jq 的each循环var names = ['lyz', '小红', '小黄']$.each(names, function (index, value) {console.log(index)console.log(value)})var userinfo = {'name': 'lyz', 'age': 18}$.each(userinfo, function (key, value) {console.log(key)console.log(value)})
</script>
</html>

事件处理

input 表示的事件

    -blur :失去焦点
    -focus:得到焦点
    -change :内容发生变化
    -input: 只要输入内容就触发

基本使用

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title><script src="./js/vue.js"></script>
</head>
<body>
<div id="d1"><h1>v-mode指令</h1>用户名:<input type="text" v-model="name"> --- {{name}}<h1>blur:失去焦点</h1><input type="text" v-model="data01" @blur="haneldBlur"> --- {{data01}}<h1>focus:得到焦点</h1><input type="text" v-model="data02" @blur="haneldFocus"> --- {{data02}}<h1>change:内容发生变化</h1><input type="text" v-model="data03" @blur="haneldChange"> --- {{data03}}<h1>input:只要输入内容就触发</h1><input type="text" v-model="data04" @blur="haneldInput"> --- {{data04}}
</div>
</body>
<script>var vm = new Vue({el: '#d1',data: {name: '',data01: '',data02: '',data03: '',data04: '',},methods: {haneldBlur() {alert(this.data01)},haneldFocus() {console.log('学技术,养活自己')},haneldChange() {console.log(this.data03)},haneldInput() {console.log(this.data04)}}})
</script>
</html>

过滤案例

补充1 数组的过滤

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title>
</head>
<body>
</body>
<script>var dataList = ['a', 'at', 'atom', 'be', 'beyond', 'bee', 'c', 'cs', 'csrf']// var newDataList = dataList.filter(function (item) {//     // return true //过滤完所有的都要//     return false  // 过滤完所有的都不要// })// console.log(newDataList)var newDataList =dataList.filter(function (item) {if (item.length>2){return true  // 过滤出长度大于2的}else {return false}})console.log(newDataList)
</script>
</html>

补充2 判断子字符串是否在字符串中

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title>
</head>
<body></body>
<script>var i='a'var j='abc'var res=j.indexOf(i) // 结果是索引0,子字符串在字符串的哪个位置console.log(res)
</script>
</html>

补充3 箭头函数

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title>
</head>
<body></body>
<script>// 1 正常匿名函数写法var f = function () {console.log('fff')}f()// 2 箭头函数写法var f = () => {console.log('fff')}f()// 3 箭头函数有参数var f = (name) => {console.log(name)}f('lyz')// 4 如果只有一个参数,可以简写,有多个参数必须加在括号中var f = name => {console.log(name)}f('lyz')// 5 箭头函数有返回值,没有其他代码,可以简写var f = name => name + '好好学技术'var res = f('lyz')console.log(res)// 6 其他案例var f = function (a, b) {return a + b}var f = (a, b) => a + b// 7 箭头函数没有自己的this,箭头函数中使用的this,是它上一层的this
</script>
</html>

过滤案例

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title><script src="./js/vue.js"></script>
</head>
<body>
<div id="d1"><h1>过滤案例</h1><input type="text" v-model="search" @input="handleSearch"><ul><li v-for="item in newDataList">{{item}}</li></ul>
</div>
</body>
<script>var vm = new Vue({el: '#d1',data: {search: '',dataList: ['a', 'at', 'atom', 'be', 'beyond', 'bee', 'c', 'cs', 'csrf'],newDataList: ['a', 'at', 'atom', 'be', 'beyond', 'bee', 'c', 'cs', 'csrf'],},methods: {// 1 写法一// handleSearch() {//     var _this = this//     this.newDataList = this.dataList.filter(function (item) {//         if(item.indexOf(_this.search) >= 0) {//             return true//         } else {//             return false//         }//     })// }// 2 写法2 使用箭头函数// handleSearch() {//     var _this = this//     this.newDataList = this.dataList.filter (item=>{//         if (item.indexOf(_this.search) >= 0) {//             return true//         } else {//             return false//         }//     })// }// 3 最终写法handleSearch() {var _this = thisthis.newDataList = this.dataList.filter(item => item.indexOf(_this.search) >= 0)}}})
</script>
</html>

事件修饰符

修饰点击事件的 修饰符
    once:只点击一次
    prevent:阻止a的跳转
    self:父签上用 ,只处理自己的事件,子控件冒泡的事件不处理
    stop:子标签上用只处理自己的事件,父控件冒泡的事件不处理(阻止事件冒泡)

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title><script src="./js/vue.js"></script>
</head>
<body>
<div id="d1"><h1>事件修饰符</h1><h2>once 只点击一次</h2><button @click.once="haneldClick">点我弹窗<</button><h2>prevent 阻止a的跳转</h2><a href="http://www.baidu.com" @click.prevent="haneldA">点我看美女</a><h3>stop,子标签上用只处理自己的事件,父控件冒泡的事件不处理(阻止事件冒泡)</h3><ul @click="handlelul"><li @click.stop="handleli">li001--不让事件往上冒泡了</li><li>li002</li></ul><h3>self,父签上用 ,只处理自己的事件,子控件冒泡的事件不处理</h3><ul @click.self="handlelul"><li @click="handleli">li001</li><li>li002</li></ul>
</div>
</body>
<script>var vm = new Vue({el: '#d1',data: {},methods: {haneldClick() {alert('点了')},haneldA() {console.log('点了')},handleli() {console.log('li被点击了')},handlelul() {console.log('ul被点击了')}}})
</script>
</html>

按键修饰符

按键是个事件--》keyup  keydown

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title><script src="./js/vue.js"></script>
</head>
<body>
<div id="d1"><h1>按键事件</h1><input type="text" @keyup="handleUp"><h2>按键修饰符</h2><input type="text" @keyup.enter="handleUp02"><input type="text" @keyup.13="handleUp03">
</div>
</body>
<script>var vm = new Vue({el: '#d1',data: {},methods: {handleUp(event) {console.log(event.key)},handleUp02() {  //只有按了回车,再触发函数执行console.log('回车被敲了')},handleUp03() {console.log('13对应的按键被按下了')}}})
</script>
</html>

数据双向绑定

# v-model 指令,只针对于input标签

# 使用v-model绑定后,只要变量发生变化,页面就变化,只要页面变化,变量就变化

表单控制

checkbox选中,单选,多选,radio

input 标签,使用 v-model 双向绑定  
    text
    password
    checkbox
    file
    radio

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title><script src="./js/vue.js"></script></head>
<body>
<div id="app"><h1>checkbox</h1><h2>用户登录示例</h2><p>用户名:<input type="text" v-model="username"></p><p>密码:<input type="password" v-model="pwd"></p><p>记住密码:<input type="checkbox" v-model="rem"></p><p>爱好:<br><input type="checkbox" v-model="hobbys" value="篮球">篮球</p><input type="checkbox" v-model="hobbys" value="足球">足球</p><input type="checkbox" v-model="hobbys" value="乒乓球">乒乓球</p><br><input type="radio" v-model="radio" value="男">男<input type="radio" v-model="radio" value="女">女<input type="radio" v-model="radio" value="保密">保密<button @click="handleSubmit">登录</button></div>
</body><script>var vm = new Vue({el: '#app',data: {username: '',pwd: '',rem: '', // 只做选中不选中判断  使用布尔hobbys: [], // 放多个元素用数组radio: ''},methods: {handleSubmit() {console.log(this.username, this.pwd, this.rem, this.hobbys,this.radio)}}})</script>
</html>

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

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

相关文章

【Spring Boot 3】【数据源】自定义JPA多数据源

【Spring Boot 3】【数据源】自定义JPA多数据源 背景介绍开发环境开发步骤及源码工程目录结构总结背景 软件开发是一门实践性科学,对大多数人来说,学习一种新技术不是一开始就去深究其原理,而是先从做出一个可工作的DEMO入手。但在我个人学习和工作经历中,每次学习新技术总…

力扣:18.四数之和

一、做题链接&#xff1a;18. 四数之和 - 力扣&#xff08;LeetCode&#xff09; 二、题目分析 1.做这一道题之前本博主建议先看上一篇《三数之和》 2.题目分析 给你一个由 n 个整数组成的数组 nums &#xff0c;和一个目标值 target 。请你找出并返回满足下述全部条件且不重…

C++自增运算符与类型转换

C中的自增和自减运算符分别是"“和”–"。这些运算符可以用于递增或递减一个变量的值。 自增运算符 () int x 5; x; // 这等同于 x x 1; // 现在 x 的值为 6自减运算符 (–) int y 10; y--; // 这等同于 y y - 1; // 现在 y 的值为 9这些运算符可以前置或后置…

计算机毕业设计 基于SpringBoot的项目申报系统的设计与实现 Java实战项目 附源码+文档+视频讲解

博主介绍&#xff1a;✌从事软件开发10年之余&#xff0c;专注于Java技术领域、Python人工智能及数据挖掘、小程序项目开发和Android项目开发等。CSDN、掘金、华为云、InfoQ、阿里云等平台优质作者✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精…

程序媛的mac修炼手册-- 终端(terminal)常用命令

「终端&#xff08;terminal&#xff09;」相当于macOS的一个 App &#xff0c;它的特殊之处是&#xff0c;它是管理其它App的App&#xff0c;操作主要通过命令行界面 (CLI) 。 相比于我们日常熟悉的用户界面&#xff08;User Interface&#xff0c;UI&#xff09;&#xff0c…

Redis 主从、哨兵和分片集群简单介绍

Redis 主从集群架构 单节点 redis 并发能力有上限&#xff0c;要进一步提高 redis 并发能力&#xff0c;就要搭建主从集群&#xff0c;实现读写分离 主从同步原理 Replicaition id&#xff1a;每台 master 机器都一个 repl_id&#xff0c;是数据集的表示&#xff0c;若 salv…

软件测试|如何在Pycharm中配置文件头部信息

简介 PyCharm是一款功能强大的Python集成开发环境&#xff08;IDE&#xff09;&#xff0c;在开发过程中&#xff0c;我们经常需要在代码文件的开头添加固定的文件说明信息&#xff0c;例如版权声明、作者信息、创建日期等。手动添加这些信息可能会很繁琐&#xff0c;但是PyCh…

[Vulnhub靶机] DriftingBlues: 5

[Vulnhub靶机] DriftingBlues: 5靶机渗透思路及方法&#xff08;个人分享&#xff09; 靶机下载地址&#xff1a; https://download.vulnhub.com/driftingblues/driftingblues5_vh.ova 靶机地址&#xff1a;192.168.67.24 攻击机地址&#xff1a;192.168.67.3 一、信息收集 …

探索人工智能:深度学习、人工智能安全和人工智能

深度学习是人工智能的一种重要技术&#xff0c;它模拟了人类大脑神经网络的工作原理&#xff0c;通过建立多层次的神经元网络来实现对数据的分析和处理。这种技术的引入使得人工智能的发展进入到了一个新的阶段。 现如今&#xff0c;深度学习在各个领域都有着广泛的应用。例如…

Java设计模式-访问者模式

访问者模式 一、概述二、结构三、案例实现四、优缺点五、使用场景六、扩展 一、概述 定义&#xff1a; 封装一些作用于某种数据结构中的各元素的操作&#xff0c;它可以在不改变这个数据结构的前提下定义作用于这些元素的新的操作。 二、结构 访问者模式包含以下主要角色: …

Echarts——使用graphic组件在一个option内同时设置两个饼图的背景图

使用echarts的graphic原生图形元素组件&#xff0c;为两个饼图设置对应背景。 <template><div id"app"><div class"charts" ref"charts"></div></div> </template><script> import * as echarts from…

贪心的歌手(100%用例)C卷 (JavaPythonC++Node.jsC语言)

一个歌手准备从A城去B城参加演出。 (1)按照合同,他必须在T天内赶到. (2)歌手途径N座城市 (3)歌手不能往回走 (4)每两座城市之间需要的天数都可以提前获知 (5)歌手在每座城市都可以在路边卖唱赚钱。经过调研,歌手提前获知了每座城市卖唱的收入预期: 如果在一座城市…

Spring面试整理-Spring注解

Spring框架提供了许多注解,用以简化配置和实现各种功能。这些注解主要分为几个类别:核心、数据访问、Web开发、调度和事务管理、测试等。下面是一些常用的Spring注解: 核心注解@Component: 用于类定义上,表明该类将被Spring容器作为组件管理。@Service: 用于标注服务层的组…

龙芯+RT-Thread+LVGL实战笔记(28)——电子琴准备工作

【写在前面】临近期末,笔者工作繁忙,因此本系列教程的更新频率有所放缓,还望订阅本专栏的朋友理解,请勿催更。笔者在此也简要声明几点: 有些硬件模块笔者并没有,如LED点阵、压力传感模块、RFID模块等,因此这些模块的相关任务暂时无法给出经过验证的代码。其实,教程进行…

【ROS】小车机器视觉巡线行驶

摄像头 USB摄像头是最普遍的摄像头&#xff0c;如笔记本内置的摄像头&#xff0c;在ROS中使用这类设备很简单&#xff0c;可以直接使用usb_cam功能包驱动&#xff0c;USB摄像头输出的是二维图像数据。 usb_cam是针对V4L协议USB摄像头的ROS驱动包&#xff0c;核心节点是usb_cam…

2024年跨境电商上半年营销日历最全整理

2024年伊始&#xff0c;跨境电商开启新一轮的营销竞技&#xff0c;那么首先需要客户需求&#xff0c;节假日与用户需求息息相关&#xff0c;那么接下来小编为大家整理2024上半年海外都有哪些节日和假期&#xff1f;跨境卖家如何见针对营销日历选品&#xff0c;助力卖家把握2024…

K8S---kubectl edit命令

一、简介 kubectl edit 用于直接更改K8S资源的字段属性值,命令模式同vi,整改保存成功之后会立即生效,并不会作用于具体的文件(因为文件会删除),如果更改的格式错误,将不会保存成功,将会在vi界面最上面抛出对应的报错原因。 二、用法 1、 更改service ‘docker-regis…

软件测试|MySQL 非空约束详解

简介 MySQL中的非空约束&#xff08;NOT NULL Constraint&#xff09;是一种用于确保表中某列不允许为空值的数据库约束。非空约束的作用是保证特定列的数据始终包含有效值&#xff0c;防止在插入或更新操作时出现空值&#xff0c;从而维护数据的完整性和一致性。在本文中&…

AtomicBoolean详解

AtomicBoolean提供了一种原子性地读写布尔类型变量的解决方 案&#xff0c;通常情况下&#xff0c;该类将被用于原子性地更新状态标识位&#xff0c;比如 flag。 1.基本用法 1.1.AtomicBoolean的创建 // AtomicBoolean 无参构造 AtomicBoolean ab new AtomicBoolean(); ass…

学习笔记之——3D Gaussian Splatting及其在SLAM与自动驾驶上的应用调研

之前博客介绍了NeRF-SLAM&#xff0c;其中对于3D Gaussian Splatting没有太深入介绍。本博文对3D Gaussian Splatting相关的一些工作做调研。 学习笔记之——NeRF SLAM&#xff08;基于神经辐射场的SLAM&#xff09;-CSDN博客文章浏览阅读967次&#xff0c;点赞22次&#xff0…