Vue入门二(列表渲染|数据的双向绑定|事件处理)

文章目录

  • 一、列表渲染
    • 小案例
    • 补充es6对象写法
    • v-for可以循环的类型
    • 补充js可循环类型
    • key值的解释
  • 二、数据的双向绑定
  • 三、事件处理
    • 基本使用
    • 过滤案例
    • 事件修饰符

一、列表渲染

小案例

	<!DOCTYPE html>
	<html lang="en">
	<head>
	    <meta charset="UTF-8">
	    <title>Document</title>
	    <script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.7.1/jquery.js"></script>
	    <script src="https://cdn.bootcdn.net/ajax/libs/twitter-bootstrap/3.3.7/js/bootstrap.min.js"></script>
	    <link href="https://cdn.bootcdn.net/ajax/libs/twitter-bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet">
	    <script src="../js/vue.js"></script>
	</head>
	
	<body>
	
	    <div id="div" class="container">
	        <div class="row">
	            <div class="col-md-8 col-md-offset-2">
	                <button class="text-center btn btn-success" @click="handleclick" style="margin-top:100px;">数据展开</button>
	                <p></p>
	                <table class="table table-hover">
	                    <thead>
	                        <tr>
	                            <th class="text-center">username</th>
	                            <th class="text-center">age</th>
	                            <th class="text-center">usertype</th>
	                        </tr>
	                    </thead>
	                    <tbody>
	                        <tr v-for="user in user_list">
	                            <td class="text-center">{{user.username}}</td>
	                            <td class="text-center">{{user.age}}</td>
	                            
	                            <td class="text-center" v-if="user.usertype==1">超级管理员</td>
	                            <td class="text-center" v-else-if="user.usertype==2">管理员</td>
	                            <td class="text-center" v-else-if="user.usertype==3">普通用户</td>
	                        </tr>
	                    </tbody>
	                </table>
	            </div>
	            
	        </div>
	    </div>
	
	    <script>
	        var vm = new Vue({
	            el:'#div',
	            data:{
	                user_list:[],
	            },
	            methods:{
	                handleclick(){
	                    this.user_list=[
	                        {'username':'jack','age':18,'usertype':1},
	                        {'username':'tom','age':20,'usertype':2},
	                        {'username':'oscar','age':25,'usertype':3},
	                    ]
	                }
	            }
	
	        })
	    </script>
	</body>
	
	</html>

在这里插入图片描述


补充es6对象写法

		1.基础写法
        var userinfo = {'username':'jack','age':18}
         console.log(userinfo)

        2.省略key的引号,但是注意key值中不能出现横杠-,这个是js语法规定的,变量也是不允许出现
        var userinfo = {username:'tom',age:22}
        console.log(userinfo)

        3.对象中直接放变量
        var username = 'jack'
        var age = 25
        var userinfo = {username,age}  //等同于{'username':'jack','age':18}
        console.log(userinfo)

        4.对象中直接放方法
        var userinfo = {
            username,age,'showDate':function(){
                console.log('名字为:'+username)
                console.log('年龄为:'+age)
                //python对象中有self,js中有this也就是当前实例对象
                console.log('另一种取名字方式:'+this.username)
            }
        }
        userinfo.showDate()

		5.方法简写
        //如果不在实例对象内部,this代指window对象,也就是bom对象,this可以不写
        //后期会遇到this指向问题
        var username = 'jack'
        var age = 25
        var showDate = function(){
            console.log(this)  //代指当前window对象,浏览器、bom对象
            console.log(location)
        }
        //showDate()
        5.1简写
        var userinfo={
            username,age,showDate
        }
        userinfo.showDate()

		5.2最终简写
        var userinfo = {
            username,age,showDate(){
                console.log('另一种取名字方式:'+this.username)
            }
        }
        userinfo.showDate()

v-for可以循环的类型

	<!DOCTYPE html>
	<html lang="en">
	<head>
	    <meta charset="UTF-8">
	    <title>Document</title>
	    <script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.7.1/jquery.js"></script>
	    <script src="https://cdn.bootcdn.net/ajax/libs/twitter-bootstrap/3.3.7/js/bootstrap.min.js"></script>
	    <link href="https://cdn.bootcdn.net/ajax/libs/twitter-bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet">
	
	    <script src="../js/vue.js"></script>
	</head>
	
	<body>
	
	    <div id="div">
	        <h1>循环数组</h1>
	        <ul>
	            <li v-for="key,index in user_list">{{key}}------>{{index}}</li>
	        </ul>
	        <hr>
	        <p>
	
	        <h1>循环字符串</h1>
	        <ul>
	            <li v-for="key,index in 'zufu'">{{key}}------>{{index}}</li>
	        </ul>
	        <hr>
	        <p>
	
	    
	        <h1>循环对象</h1>
	        <ul>
	            <li v-for="key,value in obj">{{key}}------>{{value}}</li>
	        </ul>
	        <hr>
	        <p>
	
	        <h1>循环数字</h1>
	        <ul>
	            <li v-for="key,index in 3">{{key}}------>{{index}}</li>
	        </ul>
	        <hr>
	        <p>
	    </div>    
	
	    <script>
	        var vm = new Vue({
	            el:'#div',
	            data:{
	                user_list:['jack','tom','oscar','ankn'],
	                zifu:'helloworld',
	                obj:{username:'jack',age:18},
	            },
	        })
	    </script>
	</body>
	</html>

在这里插入图片描述


补充js可循环类型

	补充js的循环方式
        //1.基于索引的循环方式
        for(var i=0;i<4;i++){
            console.log(i)
        }

        //2.in 循环
        var username = ['jack','tom','ankn','oscar'] //数组
        for(item in username){
            console.log(item) // 索引值
            console.log(username[item]) //value值
        }


        var userinfo = {username:'jack',age:18} //对象
        for(item in userinfo){
            console.log(item) //循环的是key值,这种in循环方法无法循环对象的value值
            // console.log(userinfo[tiem]) 会报错
        }


        var iyou = 'helloworld' // 字符串
        for(item in iyou){
            // console.log(tiem)
            console.log(iyou[item]) //只能获取value值,无法获取到索引
        }

        //数字无法使用in循环


        //3.of循环
        var username = ['jack','tom','ankn','oscar'] //数组
        for(item of username){
            console.log(item) // 只能获取到value值,无法像in能获取到索引
        }


        //对象不能使用of循环

        var iyou = 'helloworld' // 字符串
        for(item of iyou){
            console.log(item) //只能获取value值,无法获取到索引
        }

        //数字无法使用of循环

        
        //4.数组的方法,实现循环
        var username = ['jack','tom','ankn','oscar'] //数组
        username.forEach(function(value,index){ //获取到的世value和index
            console.log(value)
            console.log(index)
        })

        //对象没有循环方法


        //5.jQuery的each循环
        var username = ['jack','tom','ankn','oscar'] //数组
        $.each(username,function(index,value){ //获取到的是index和value
            console.log(index)
            console.log(value)
        })

        var userinfo ={username:'jack',age:20}
        $.each(userinfo,function(key,value){ //获取到的是key和value
            console.log(key)
            console.log(value)
        })

注意!在Vue中:数组的indexvalue是反的 | 对象的keyvalue也是反的

key值的解释

	vue中使用的是虚拟DOM,会和原生的DOM进行比较,然后进行数据的更新,
	提高数据的刷新速度(虚拟DOM用了diff算法)

	在v-for循环数组、对象时,建议在控件/组件/标签写1个key属性,属性值唯一
	页面更新之后,会加速DOM的替换(渲染)
	:key="变量"

	 <div v-for="item in 8" :key="item">{{item}}</div>
	// 尽量要写key值,这样虚拟dom每次操作的根据变动的key值做监听

二、数据的双向绑定

单向数据绑定:value=‘变量’< input type=“text” :value=“name”>
双向数据绑定v-model=‘变量’< input type=“text” v-model=“age”>—{{age}}

input框的vulue 值是单向数据绑定,输入框输入值后,值就会被js变量拿到。input框使用:value='变量'这种形式,页面输入框变化,变量不会变,但使用v-model 做双向数据绑定,输入框输入数据,变量也会跟着变化

	<!DOCTYPE html>
	<html lang="en">
	<head>
	    <meta charset="UTF-8">
	    <title>Document</title>
	    <script src="../js/vue.js"></script>
	</head>
	
	<body>
	
	    <div id="div">
	       <h1>数据的双向绑定</h1>
	       username: <input type="text" v-model="username">
	       <P/>
	       password: <input type="password" v-model="password">
	       <p/>
	       <button @click="onsubmit">提交</button>

	    </div>    
	
	    <script>
	        var vm = new Vue({
	            el:'#div',
	            data:{
	                // userinfo:{username:'jack',password:123}
	                username:'',
	                password:'',
	            },
	            methods:{
	                onsubmit(){
	                    console.log(this.username,this.password)
	                }
	            }
	        })
	
	    </script>
	</body>
	
	</html>

三、事件处理

基本使用

事件绑定 V-on:事件名 = ‘函数’ 简写 @事件名 = ‘函数’

事件释义实例
click点击事件<input type=“text” @click=“handleClick”>
input当输入框进行输入的时候 触发的事件<input type=“text” @input=“handleInput”>
blur当输入框失去焦点的时候 触发的事件<input type=“text” @blur=“handleBlur”>
change当元素的值发生改变时 触发的事件<input type=“text” @change=“handleChange”>
focus当获得焦点,触发事件<input type=“text” @focus=“handleFocus”>
	<!DOCTYPE html>
	<html lang="en">
	<head>
	    <meta charset="UTF-8">
	    <title>Document</title>
	    <script src="../js/vue.js"></script>
	</head>
	
	<body>
	    <div id="div">
	        <h1>input事件处理</h1>
	        <h3>blur</h3><p><input type="text" v-model="name1" @blur="onblur">------>{{name1}}</p>
	        <h3>change</h3><p><input type="text" v-model="name2" @change="onchange">------>{{name2}}</p>
	        <h3>input</h3><p><input type="text" v-model="name3" @input="oninput">------>{{name3}}</p>
	    </div>    
	
	    <script>
	        var vm = new Vue({
	            el:'#div',
	            data:{
	                name1:'',
	                name2:'',
	                name3:'',
	            },
	            methods:{
	                onblur(){
	                    console.log('失去焦点时触发'+this.name1)
	                },
	                onchange(){
	                    console.log('数据发生改变时触发'+this.name2)
	                },
	                oninput(){
	                    console.log('内容发生变化时触发'+this.name3)
	                }
	
	            }
	        })
	
	    </script>
	</body>
	
	</html>

在这里插入图片描述


过滤案例

模拟搜索框信息提示案例

只有数组有过滤器,根据输入框输入的内容对目标数组进行条件过滤,只显示想要的数组内容。代码如下

	<!DOCTYPE html>
	<html lang="en">
	<head>
	    <meta charset="UTF-8">
	    <title>Document</title>
	    <script src="../js/vue.js"></script>
	</head>
	
	<body>
	
	    <div id="div">
	        <h1>过滤案例</h1>
	        <input type="text" v-model="search" @input="oninput">
	        <ul>
	            <li v-for="item in NewDateList">{{item}}</li>
	        </ul>
	    </div>    
	
	    <script>
	        var vm = new Vue({
	            el:'#div',
	            data:{
	                search:'',
	                datelist:['a', 'at', 'atom', 'be', 'beyond', 'bee', 'c', 'cs', 'csrf'],
	                NewDateList:['a', 'at', 'atom', 'be', 'beyond', 'bee', 'c', 'cs', 'csrf'],
	            },
	            methods:{
	                //1.笨方法实现过滤
	                oninput(){
	                    //这里的this是实例对象
	                    var _this = this
	
	                    //过滤掉datelist中每一个是否包含用户输入的this.search
	
	                    this.NewDateList = this.datelist.filter(function(item){
	                        //这内部的this是window对象
	                        if(item.indexOf(_this.search) >= 0){ //箭头函数  字符串.indexOf(子字符串)
	                            return true
	                        }else{
	                            return false
	                        }
	                    })
	                }

					//2.箭头函数
	                oninput(){
	                    this.NewDateList=this.datelist.filter(item => item.indexOf(this.search) >= 0)
	                }

	            }
	        })
	
	    </script>
	</body>
	</html>

事件修饰符

就是对click事件的修饰,针对父标签和子标签里面的事件,当子标签里面的点击事件被点击了,同时会传给父标签的点击事件,引发点击事件的触发,称为冒泡事件。

事件修饰符释义
.stop只处理自己的事件,子控件冒泡的事件不处理(阻止事件冒泡)
.self只处理自己的事件,子控件冒泡的事件不处理
.prevent阻止a链接的跳转
.once事件只会触发一次(适用于抽奖页面)

在这里插入图片描述

	<!DOCTYPE html>
	<html lang="en">
	<head>
	    <meta charset="UTF-8">
	    <title>Document</title>
	    <script src="../js/vue.js"></script>
	</head>
	
	<body>
	
	    <div id="div">
	        <h1>事件修饰符</h1>
	        <h4>事件冒泡--->通过事件修饰符 stop ,子控件不再冒泡给父控件</h4>
	        <ul @click="handleUl">
	            <li @click.stop="handleone">first</li>
	            <li>second</li>
	        </ul>
	
	        <hr>    
	
	        <h4>事件冒泡--->通过事件修饰符 self ,只处理自己的事件,子控件的冒泡,不处理父标签的</h4>
	        <ul @click.self="handleUl">
	            <li @click.stop="handleone">first</li>
	            <li>second</li>
	        </ul>
	
	
	        <h3>prevent阻止a标签跳转</h3>
	        <a href="https://www.baidu.com" @click.prevent="handleA">点击跳转百度</a>
	
	
	        <hr>
	
	        <h3>once只执行一次</h3>
	        <button @click.once="handleclick">点击抽奖</button>
	    </div>    
	
	    <script>
	        var vm = new Vue({
	            el:'#div',
	            data:{
	            },
	            methods:{
	                handleUl(){
	                    console.log('UI标签被点击了')
	                },
	                handleone(){
	                    console.log('li标签被点击了')
	                },
	                handleA(){
	                    console.log('a标签被点击了')
	                    //阻止a标签的跳转,可以自己决定需不需prevent
	                    //可以手动指定跳转 
	                    //location.href='https://wangyi.com'
	                },
	                handleclick(){
	                    console.log('点击抽奖了')
	                }
	
	            }
	        })
	
	    </script>
	</body>
	
	</html>

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

openGauss学习笔记-190 openGauss 数据库运维-常见故障定位案例-服务启动失败

文章目录 openGauss学习笔记-190 openGauss 数据库运维-常见故障定位案例-服务启动失败190.1 服务启动失败190.1.1 问题现象190.1.2 原因分析190.1.3 处理办法 openGauss学习笔记-190 openGauss 数据库运维-常见故障定位案例-服务启动失败 190.1 服务启动失败 190.1.1 问题现…

Redis(三)持久化

文章目录 RDB&#xff08;Redis Database&#xff09;自动触发保存频率修改dump文件保存路径修改文件保存名称dump恢复 手动触发save![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/a56fdff44aee4efa96c2ce3615b69dc1.png)bgsave 优劣优点缺点 检查修复dump文件会触…

(生物信息学)R语言绘图初-中-高级——3-10分文章必备——点阵图(初级)

生物信息学文章的发表要求除了思路和热点以外,图片绘制是否精美也是十分重要的,本专栏为(生物信息学)R语言绘图初-中-高级——3-10分文章必备,主要通过大量文献,总结3-10分文章中高频出现的各种图片,并给大家提供图片复现的R语言代码,及图片识读。 本专栏将向大家介绍…

数据库原理与应用期末复习试卷1

数据库原理与应用期末复习试卷1 一.单项选择题 数据库系统是采用了数据库技术的计算机系统&#xff0c;由系统数据库&#xff0c;数据库管理系统&#xff0c;应用系统和&#xff08;C&#xff09;组成。 ​ A.系统分析员 B.程序员 C.数据库管理员 D.操作员 数据库系统的体系…

基于YOLOv7算法的高精度实时19类动物目标检测识别系统(PyTorch+Pyside6+YOLOv7)

摘要&#xff1a;基于YOLOv7算法的高精度实时19类动物目标检测系统可用于日常生活中检测与定位19类动物目标&#xff08;水牛、 斑马、 大象、 水豚、 海龟、 猫、 奶牛、 鹿、 狗、 火烈鸟、 长颈鹿、 捷豹、 袋鼠、 狮子、 鹦鹉、 企鹅、 犀牛、 羊和老虎&#xff09;&#x…

基于WIFI指纹的室内定位算法matlab仿真

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 4.1WIFI指纹定位原理 4.2 指纹数据库建立 4.3定位 5.算法完整程序工程 1.算法运行效果图预览 2.算法运行软件版本 matlab2022a 3.部分核心程序 .....................................…

动态规划(整数拆分、不同的二叉搜索树)

343. 整数拆分 给定一个正整数 n&#xff0c;将其拆分为至少两个正整数的和&#xff0c;并使这些整数的乘积最大化。 返回你可以获得的最大乘积。 示例 1: 输入: 2 输出: 1 解释: 2 1 1, 1 1 1。 示例 2: 输入: 10 输出: 36 解释: 10 3 3 4, 3 3 4 36。 说明: 你…

JavaScript基础(25)_dom查询练习(二)

<!DOCTYPE html> <html lang"zh"> <head><meta charset"UTF-8"><title>dom查询练习二</title><link rel"stylesheet" href"../browser_default_style/reset.css"><style>form {margi…

阿里与上交大提出 LLM 长文本计算新解法:可处理文本长达 1900k 字节

在实际应用大模型的过程中&#xff0c;尤其是处理长文本的上下文信息时&#xff0c;如何高效灵活地调度计算资源成为一个学术界与工业界共同关注的问题。 大语言模型所能容纳的上下文长度直接影响了诸如 ChatGPT 等高级应用与用户交互体验的优劣程度&#xff0c;这给云环境下的…

CHS_02.1.1.2+操作系统的特征

CHS_02.1.1.2操作系统的特征 操作系统的四个特征并发这个特征为什么并发性对于操作系统来说是一个很重要的基本特性资源共享虚拟异步性 操作系统的四个特征 操作系统有并发 共享 虚拟和异部这四个基本的特征 其中 并发和共享是两个最基本的特征 二者互为存在条件 我们会按照这…

pycharm中Pyside2/QtDesigner安装和配置

目录 1、安装pyqt5 2、安装pyqt5-tools 3、在pycharm中配置Qt Designer PyQt5/QtDesigner安装和配置 1、安装pyqt5 pip install pyqt5 安装了 pyqt5 之后&#xff0c;在 python 安装目录下面的 Scripts 文件夹中&#xff0c;有一个 pyuic5.exe 文件&#xff0c;这个可执行文…

大模型上下文长度的超强扩展:从LongLoRA到LongQLoRA

前言 本文一开始是《七月论文审稿GPT第2版&#xff1a;从Meta Nougat、GPT4审稿到Mistral、LongLora Llama》中4.3节的内容&#xff0c;但考虑到 一方面&#xff0c;LongLora的实用性较高二方面&#xff0c;为了把LongLora和LongQLora更好的写清楚&#xff0c;而不至于受篇幅…

【JUC】进程和线程

目录 &#x1f4e2;什么是进程?&#x1f3a1;什么是线程?&#x1f680;进程和线程的区别?&#x1f3a2;Java 线程和操作系统的线程有啥区别&#xff1f;&#x1f396;️JDK21的虚拟线程&#x1f3af;虚拟线程和平台线程的对比 &#x1f4e2;什么是进程? 进程是程序的一次执…

1032: 员工薪水 和 1041: 数列求和2

1032: 员工薪水 某公司规定&#xff0c;销售人员工资由基本工资和销售提成两部分组成&#xff0c;其中基本工资是1500元/月&#xff0c;销售提成规则如下&#xff1a; 销售额小于等于10000元时&#xff0c;按照5%提成&#xff1b; 销售额大于10000元但小于等于50000元时&am…

2024年了,难道还不会使用谷歌DevTools么?

我相信您一定对Chrome浏览器非常熟悉,因为它是前端开发者最亲密的伙伴。我们可以使用它查看网络请求、分析网页性能以及调试最新的JavaScript功能。 除此之外,它还提供了许多功能强大但不常见的功能,这些功能可以大大提高我们的开发效率。 让我们来看看。 1. 重新发送XHR…

Java网络爬虫--概述与原理

目录标题 基本概念与原理爬虫与搜索系统的关系爬虫运行原理爬虫步骤DNS域名解析 爬虫开发本质网络爬虫的分类通用网络爬虫聚集网络爬虫增量式网络爬虫Deep Web爬虫 参考文献 基本概念与原理 爬虫又叫网络蜘蛛&#xff0c;一种运行在互联网上用来获取数据的自动程序。 互联网的…

程序员副业之AI情侣头像(手把手超详细完整全流程)

项目介绍 小黑今天给咱们分享个轻松简单的项目&#xff0c;每天不会超过半小时&#xff0c;就是用AI制作情侣头像&#xff0c;在抖音上变现。听起来是不是很科幻&#xff1f;但实际上效果杠杠的&#xff01; 最关键的是&#xff0c;收入方面&#xff0c;一单9块9&#xff0c;…

水文模型(科普类)

SWMM 模型概况&#xff1a; SWMM5 系列拥有编辑区域数据的功能&#xff0c;而且能模拟水文、 水力和水质。其核心部分是管道汇流计算模块&#xff0c;提供了恒定流法、运动波法和动力波法三种水动力学 方法。其中动力波法通过求解完整的圣维南方 程组进行计算&#xff0c;能够…

Open3D 点云下采样抽稀(7)

Open3D 点云下采样抽稀&#xff08;7&#xff09; 一、算法介绍二、算法实现1.代码 一、算法介绍 点云抽稀在计算机图形学和计算机视觉中有着广泛的应用&#xff0c;其作用包括但不限于以下几点&#xff1a; 数据压缩&#xff1a; 点云抽稀可以有效地减少点云数据量&#xff0…

浏览器使用隧道代理HTTP:洞悉无界信息

在信息爆炸的时代&#xff0c;互联网已经成为获取信息的首选渠道。然而&#xff0c;在某些地区或情况下&#xff0c;访问某些网站可能会受到限制。这时&#xff0c;隧道代理HTTP便成为了一个重要的工具&#xff0c;帮助用户突破限制&#xff0c;洞悉无界信息。 一、隧道代理HT…