Vue框架-03:JS的几种循环方式,Key值的解释,数组/对象的检测与更新,input事件,v-model数据双向绑定,过滤案例,事件修饰符,按键修饰符,表单控制
前端开发之Vue框架
一、JS循环的几种方式
1、v-for可循环的变量
循环数组:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>v-for循环</title>
<script src="../js/vue.js"></script>
</head>
<body>
<div id="app01">
<h1>循环数组</h1>
<div v-for="(item,index) in dataList">
<p>列表索引第:{{index}} 位,值:{{item}}</p>
</div>
</div>
</body>
<script>
var vm = new Vue({
el: '#app01',
data: {
// 数组
dataList: ['1', '2', '3', '4', '5']
}
})
</script>
</html>
循环对象:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>v-for循环</title>
<script src="../js/vue.js"></script>
</head>
<body>
<div id="app01">
<h1>循环对象</h1>
<div v-for="(value,key) in dataObj">
<p>值:{{value}},键:{{key}}</p>
</div>
</div>
</body>
<script>
var vm = new Vue({
el: '#app01',
data: {
// 对象
dataObj: {
name: 'kang',
age: 18,
gender: 'male'
}
}
})
</script>
</html>
循环字符:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>v-for循环</title>
<script src="../js/vue.js"></script>
</head>
<body>
<div id="app01">
<h1>循环字符</h1>
<div v-for="(item,index) in dataStr">
<p>值:{{item}},对应索引位置:{{index}}</p>
</div>
</div>
</body>
<script>
var vm = new Vue({
el: '#app01',
data: {
// 字符
dataStr: 'Happy every day'
}
})
</script>
</html>
循环数字:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>v-for循环</title>
<script src="../js/vue.js"></script>
</head>
<body>
<div id="app01">
<h1>循环数字</h1>
<div v-for="(item,index) in 10">
<p>值:{{item}},对应索引位置:{{index}}</p>
</div>
</div>
</body>
</html>
2、js的循环方式
基于索引的循环:自定义数字或根据数组内数据的个数循环
<script>
// 方式一:自定义循环
for (i = 0; i < 10; i++) {
console.log(i)
}
// 方式二:基于索引循环
var a = [1,2,3,4,5]
for (i = 0; i < a.length; i++) {
console.log(i)
}
</script>
js的in循环:获取到的是索引位置
<script>
var a = [1, 2, 3, 4, 5]
for (i in a) {
console.log(i,a[i]) // i:索引的位置,a[i]:值
}
</script>
js的of循环:根据数组内数据的个数循环,获取到的是值(循环对象会报错)
<script>
var a = [100, 2,99, 4, 2]
for (i of a) {
console.log(i)
}
</script>
js的forEach循环:
<script>
var b = [1212,223,344,45,624]
b.forEach(function (item,index){
console.log(item,index)
})
</script>
jq的Each循环:需要引入jqery的cdn
<script>
// 循环对象
var a = {
'name': 'kangkang',
'age': '18',
'gender': 'male'
}
$.each(a,function(key,value){
console.log(key,value)
} )
// 循环数组
var b = [1212, 223, 344, 45, 624]
$.each(b, function (index, item) {
console.log(index, item)
})
</script>
二、Key值的解释
在使用Vue的v-for循环时,其底层原理是将被循环的数据依次添加到页面中,若已被循环的数据局部发生改变时,按常规的理解,其底层还要重新进行一次循环,更新数据,但在Vue中可以在被循环的标签上指定一个key属性,指定该属性的值为当前被循环的值的索引位置,这样当数据只是发送局部改变时,其底层就只会将局部的数据根据索引位置添加到页面中,这样做的效果是可以提高虚拟dom操作的效率,从而提高循环效率,注意:key值必须为唯一值
<div v-for="item in 10" :key="item">{{item}}</div>
三、数组、对象的检测与更新
在已经被循环渲染的页面上,将数据中新增一个键值对,发现数据并没有被同步渲染出来,这是因为Vue中存在一个小的BUG,只需要用Vue.set(this.info, 'hobby', '篮球') 设置一下即可
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>v-for循环</title>
<script src="../js/vue.js"></script>
</head>
<body>
<div id="app01">
<div v-for="(key,value) in dataObj">
<p>值:{{key}},键:{{value}}</p>
</div>
<button @click="handleClick">点我添加数据</button>
</div>
</body>
<script>
var vm = new Vue({
el: '#app01',
data: {
// 对象
dataObj: {
name: 'kang',
age: 18,
gender: 'male'
},
}
,
methods: {
handleClick() {
this.dataObj['hobby'] = 'read'
// Vue.set(this.dataObj, 'hobby', 'read')
}
}
})
</script>
</html>
四、input事件
常用的input事件
方法 | 描述 |
---|---|
click | 单击时触发 |
input | 当输入框进行输入的时候,触发的事件 |
change | 当元素的值发生改变时,触发的事件 |
blur | 当输入框失去焦点的时候,触发的事件 |
focus | 当获得焦点,触发事件 |
代码用法:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>v-for循环</title>
<script src="../js/vue.js"></script>
</head>
<body>
<div id="app01">
<h1>点击事件 --- click</h1>
<input type="text" @click="handleClick">
<h1>输入事件 --- input</h1>
<input type="text" @input="handleInput">
<h1>输入框发文本生改变触发 --- change</h1>
<input type="text" @change="handleChange">
<h1>输入框失去焦点触发 --- blur</h1>
<input type="text" @blur="handleBlur">
<h1>输入框获得焦点触发 --- focus</h1>
<input type="text" @focus="handleFocus">
</div>
</body>
<script>
var vm = new Vue({
el: '#app01',
data: {},
methods: {
handleClick() {
alert('触发了click事件')
},
handleInput() {
alert('触发了input事件')
},
handleChange() {
alert('触发了change事件')
},
handleBlur() {
alert('触发了blur事件')
},
handleFocus(){
alert('触发了focus事件')
}
}
})
</script>
</html>
五、v-model双向数据绑定
简介:
在input框中输入数值时,输入后就会被js变量拿到,如果使用的是:value="变量",的方式,页面中输入框变化,变量不会变,只有使用v-model才能够做到数据双向绑定
代码用法:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>v-model双向数据绑定</title>
<script src="../js/vue.js"></script>
</head>
<body>
<div id="app01">
<h1>常规数据绑定</h1>
<input type="text" :value="data_str">------>{{data_str}}
<h1>v-model 双向数据绑定</h1>
<input type="text" v-model="model_str">------>{{model_str}}
</div>
</body>
<script>
var vm = new Vue({
el: '#app01',
data: {
data_str: '',
model_str: '',
}
})
</script>
</html>
六、过滤案例
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<script src="../js/vue.js"></script>
</head>
<body>
<div>
<div class="app">
<p>请输入要搜索的内容:<input type="text" v-model="myText" @input="handleInput"></p>
<ul>
<li v-for="item in newDataList">{{item}}</li>
</ul>
</div>
</div>
</body>
<script>
var vm = new Vue({
el: '.app',
data: {
myText: '',
dataList: ['a', 'at', 'atom', 'be', 'beyond', 'cs', 'csrf'],
newDataList: ['a', 'at', 'atom', 'be', 'beyond', 'cs', 'csrf'],
},
methods: {
handleInput() {
this.newDataList = this.dataList.filter(
item => item.indexOf(this.myText) >= 0
)
}
}
})
</script>
</html>
七、事件修饰符(了解)
修饰符 | 描述 |
---|---|
.stop | 自己的事件结束后不会父标签冒泡(阻止事件冒泡) |
.self | 只处理自己的事件,子标签冒泡的事件不处理 |
.prevent | 阻止a链接的跳转 |
.once | 事件只会触发一次(适用于抽奖页面) |
代码用法:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>v-for循环</title>
<script src="../js/vue.js"></script>
</head>
<body>
<div id="app01">
<h1>stop事件修饰</h1>
<div @click="handleDiv">
<p><span @click.stop="handleSpan">我是div的子标签span1</span></p>
<p><span>我是div的子标签span2</span></p>
</div>
<h1>self事件修饰</h1>
<div @click.self="handleDiv">
<p><span @click="handleSpan">我是div的子标签span1</span></p>
<p><span>我是div的子标签span2</span></p>
</div>
<h1>prevent阻止a标签跳转</h1>
<p><a href="https://www.baidu.com" @click.prevent="handleA">点我进入百度搜索</a></p>
<h1>once事件只会触发一次</h1>
<span @click.once="handleA">点我触发事件</span>
</div>
</body>
<script>
var vm = new Vue({
el: '#app01',
data: {} ,
methods: {
handleDiv() {
alert('触发了div标签事件')
},
handleSpan() {
alert('触发了span1标签事件')
},
handleA() {
alert('a标签被点击了')
}
}
})
</script>
</html>
八、按键修饰符
简介:
指,只要按下键盘上的某一个案件就会触发函数执行
代码介绍:
@keyup="handleKeyUp" # 只要按下某个键就会触发函数
@keyup.enter # enter为指定的案件,只有按下enter才会触发函数
@keyup.13 # 13是与键盘上某个按键的参照数,指只有按下对应的按键才会触发函数
代码用法:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>v-for循环</title>
<script src="../js/vue.js"></script>
</head>
<body>
<div id="app01">
<input type="text" @keyup.x="handleKeyup">
</div>
</body>
<script>
var vm = new Vue({
el: '#app01',
data: {},
methods: {
handleKeyup(data) {
console.log(data)
}
}
})
</script>
</html>
九、表单控制
简介:
表单控制指,可以监听并input标签type属性的,实时完成数据双向绑定
- text类型:
- 字符,绑定字符类型变量
- radio:
- 单选,绑定字符类型变量
- ckeckbox:
- 多选,绑定数组类型变量
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>表单控制</title>
<script src="../js/vue.js"></script>
</head>
<body>
<div id="app01">
<p>用户名:</p>
<p><input type="text" v-model="username"></p>
<p>性别:</p>
<p>
男:<input type="radio" v-model="gender" value="男">
女:<input type="radio" v-model="gender" value="女">
</p>
<p>爱好:</p>
<p>
阅读:<input type="checkbox" v-model="hobby" value="read">
编程:<input type="checkbox" v-model="hobby" value="python">
运动:<input type="checkbox" v-model="hobby" value="sports">
</p>
<br>
<hr>
<span>用户输入:
<p>{{username}}</p>
<p>{{gender}}</p>
<p>{{hobby}}</p>
</span>
</div>
</body>
<script>
var vm = new Vue({
el: '#app01',
data: {
username: '',
gender: '',
hobby: []
},
})
</script>
</html>
十、补充
1、数字过滤方法
// 补充1 :数组的过滤方法
// var dataList = ['a', 'at', 'atom', 'be', 'beyond', 'cs', 'csrf']
// var newDataList = dataList.filter(function (item) {
// return false // return true表示这个值保留,false 表示这个值不要
// })
// console.log(newDataList)
2、字符串indexof方法
判断子字符串是否在当前字符串中,如果在返回的是索引,如果不在返回0以下数字
// var s = 'lqz is handsome'
// var s1 = 'qqq'
// var i = s.indexOf(s1)
// console.log(i)
3、箭头函数
es6 的箭头函数写法---》函数中套函数,this指向有问题,有了箭头函数,箭头函数没有自己的this,用的都是上一级的this
1、 无参数,无返回值箭头函数
var f = () => {
console.log('函数')
}
2、有一个参数,没有返回值的箭头函数 括号可以去掉,可以加
var f = item => {
console.log(item)
}
3、有多个参数,没有返回值的箭头函数 括号不能去掉
var f = (item, key) => {
console.log(item)
}
4、有一个参数,一个返回值
var f = (item)=> {
return item + 'lqz'
}
var f = item => {
return item + 'lqz'
}
Vue框架-03:JS的几种循环方式,Key值的解释,数组/对象的检测与更新,input事件,v-model数据双向绑定,过滤案例,事件修饰符,按键修饰符,表单控制的更多相关文章
- 前端vue之属性指令、style和class、条件渲染、列表渲染、事件处理、数据双向绑定、表单控制、v-model进阶
今日内容概要 属性指令 style和class 条件渲染 列表渲染 事件处理 数据的双向绑定 v-model进阶 购物车案例 内容详细 1.属性指令 <!DOCTYPE html> < ...
- 【温故知新】——原生js中常用的四种循环方式
一.引言 本文主要是利用一个例子,讲一下原生js中常用的四种循环方式的使用与区别: 实现效果: 在网页中弹出框输入0 网页输出“欢迎下次光临” 在网页中弹出框输入1 网页输出“查询中……” 在 ...
- 第二章 Vue快速入门--13 讲解v-model实现表单元素的数据双向绑定
<!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8&quo ...
- java框架之Hibernate(4)-几种检索方式
准备 模型及映射文件 package com.zze.bean; import java.util.HashSet; import java.util.Set; public class Class ...
- 原生js实现 vue的数据双向绑定
原生js实现一个简单的vue的数据双向绑定 vue是采用数据劫持结合发布者-订阅者模式的方式,通过Object.defineProperty()来劫持各个属性的setter,getter,在数据变动时 ...
- 【学习笔记】剖析MVVM框架,简单实现Vue数据双向绑定
前言: 学习前端也有半年多了,个人的学习欲望还比较强烈,很喜欢那种新知识在自己的演练下一点点实现的过程.最近一直在学vue框架,像网上大佬说的,入门容易深究难.不管是跟着开发文档学还是视频教程,按步骤 ...
- js的三种继承方式及其优缺点
[转] 第一种,prototype的方式: //父类 function person(){ this.hair = 'black'; this.eye = 'black'; this.skin = ' ...
- js的6种继承方式
重新理解js的6种继承方式 注:本文引用于http://www.cnblogs.com/ayqy/p/4471638.html 重点看第三点 组合继承(最常用) 写在前面 一直不喜欢JS的OOP,在学 ...
- 细说 js 的7种继承方式
在这之前,先搞清楚下面这个问题: function Father(){} Father.prototype.name = 'father'; Father.prototype.children = [ ...
- 原生js实现数据双向绑定
最近接触了vue,在谈到vue等等的mvvm框架之前,先了解什么是数据双向绑定以及如何利用原生JS实现数据双向绑定 单向数据绑定 指先把模板写好,然后把模板和数据(数据可能来自后台)整合到一起形成HT ...
随机推荐
- Codeforces Round #834 (Div. 3) A-G
比赛链接 A 题目 知识点:模拟. 确定开头字母,然后循环比较即可. 时间复杂度 \(O(n)\) 空间复杂度 \(O(n)\) 题解 #include <bits/stdc++.h> # ...
- 是时候考虑升级 JDK 17 了
Spring,作为 Java EE 的事实规范,在2022年11月16日发布了最新的 6.0.0 GA 版本.这个版本是框架后续新生代的初始版本,拥抱持续创新的 OpenJDK 和 Java 生态.新 ...
- linux配置 python 开发环境sublime text及一些使用心得
前言 一直以来我都使用 sublime text 作为主流开发的 ide ,但其实我开始在我的 linux mint 系统使用 sublime text 配置 python3 的开发环境踩过的坑又何止 ...
- 【每日一题】【链表.next.next判空条件】141. 环形链表/NC4 判断链表中是否有环-211120/220123
给你一个链表的头节点 head ,判断链表中是否有环. 如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环. 为了表示给定链表中的环,评测系统内部使用整数 pos 来表示链 ...
- 【敏捷研发系列】前端DevOps流水线实践
作者:胡骏 一.背景现状 软件开发从传统的瀑布流方式到敏捷开发,将软件交付过程中开发和测试形成快速的迭代交付,但在软件交付客户之前或者使用过程中,还包括集成.部署.运维等环节需要进一步优化交付效率.因 ...
- npm设置
1.默认安装完node.js后会自己安装npm,通过npm下载全局模块默认安装到C:\Users\wangyc\AppData\Roaming目录下,主要有两个文件夹:npm.npm-cache 2. ...
- Qt自带的阴影类、跨线程问题汇总、hover相关、全屏轮子,一些思考。
一点思考:故事的结局重不重要? 我语文不好,但是我数学不好. 我数学不好,但是我英语不好. 我英语不好,但是我物理不好. 我物理不好,但是我化学不好. 我化学不好,但是我历史不好. 我历史不好,但是我 ...
- plsql developer切换用户
方法1: 1.双击plsql developer桌面软件图标启动软件 2.在连接窗口中填写连接信息,连接数据库 3.在新建窗口下拉选项中,选择命令窗口功能 4.在工作区内会出现当前用户连接数据库的窗口 ...
- 红袖添香,绝代妖娆,Ruby语言基础入门教程之Ruby3基础语法,第一次亲密接触EP01
书接上回,前一篇我们在全平台构建好了Ruby3的开发环境,现在,可以和Ruby3第一次亲密接触了. Ruby是一门在面向对象层面无所不用其极的解释型编程语言. 我们可以把编写Ruby代码看作是一场行为 ...
- HTML笨方法仿写站酷
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...