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

news2024/11/24 12:39:18

文章目录

  • 一、列表渲染
    • 小案例
    • 补充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>

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

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

相关文章

跨平台的传输协议@WebDav协议@windows系统配置WedDav服务器@局域网内的WebDav传输系统

文章目录 WebDav协议基本信息启用必要的windows功能启动站点管理器IIS站点根目录访问权限设置站点的功能设置端口通行防火墙IMME文件类型(文件后缀)其他设备登录和访问本机的WebDav服务站点 小结优点缺点 refs WebDav 协议基本信息 来自wikipedia:基于Web的分布式编写和版本控…

数字IC芯片设计实现 | 时序Timing Signoff check_timing检查解析

今天分享在数字IC芯片设计实现做timing signoff阶段必须要看的report。check_timing的报告必须是clean的&#xff0c;否则芯片回来大概率是废片&#xff01;&#xff01;&#xff01;实际上一堆公司的芯片败在不看这个report了。 我们知道primetime(简称PT)做时序检查是基于我…

RT-Thread: 基于STM32CubeMX配置驱STM32驱动的USB虚拟串口调试

关键词&#xff1a;USB 虚拟串口 USB虚拟串口&#xff0c;RT-Thread Studio&#xff0c;STM32 说明&#xff1a; 1&#xff1a;文档记录 STM32F103系列基于 RT-Thread 系统的 USB虚拟串口的开启及数据收发应用流程介绍。 2&#xff1a;本文以STM32F103C8T6型号做测试&#x…

Java-伪共享

在说这个计算机术语之前&#xff0c;我先在这里问候所有问“什么是JVM伪共享”的垃圾JAVA程序员以及一瓶不满半瓶晃荡的面试官全家 我从来没想过国内已经很卷的JAVA圈&#xff0c;已经卷到语无伦次的地步了&#xff0c;“伪共享”是java程序员应该知道的吗&#xff1f;能问出这…

【Linux Shell】5. 运算符

文章目录 【 1. expr 命令 】【 2. 算术运算符 】【 3. 关系运算符 】【 4. 布尔运算符 】【 5. 逻辑运算符 】【 6. 字符串运算符 】【 7. 文件测试运算符 】 【 1. expr 命令 】 原生 bash 不支持简单的数学运算&#xff0c;但是可以通过其他命令来实现&#xff0c;例如 awk …

基于SSM图书管理系统【源码】【最详细运行文档】

SSM图书管理系统【源码】【最详细运行文档】 系统简介系统涉及系统运行系统演示源码获取 系统简介 以往的图书馆管理事务处理主要使用的是传统的人工管理方式&#xff0c;这种管理方式存在着管理效率低、操作流程繁琐、保密性差等缺点&#xff0c;长期的人工管理模式会产生大量…

超维空间M1无人机使用说明书——52、ROS无人机二维码识别与降落

引言&#xff1a;使用二维码引导无人机实现精准降落&#xff0c;首先需要实现对二维码的识别和定位&#xff0c;可以参考博客的二维码识别和定位内容。本小节主要是通过获取拿到的二维码位置&#xff0c;控制无人机全向的移动和降落&#xff0c;分为两种&#xff0c;一种是无人…

【JAVA】final、finally、finalize 有什么区别?

&#x1f34e;个人博客&#xff1a;个人主页 &#x1f3c6;个人专栏&#xff1a; JAVA ⛳️ 功不唐捐&#xff0c;玉汝于成 目录 前言 正文 final&#xff1a; finally&#xff1a; finalize&#xff1a; 结语 我的其他博客 前言 在Java中&#xff0c;final、f…

适合培训协会搭建的培训机构管理系统开发方案

一、项目背景与目标 &#xff08;一&#xff09;项目背景 培训学校教务管理系统是培训机构数字化管理的必备系统&#xff0c;该系统功能大大提升机构办学的管理效率、提升机构在家长心中的专业度&#xff0c;市面上的培训机构管理系统收费越来越贵&#xff0c;为了给协会内培…

CMake入门教程【核心篇】静态库 (.a, .lib)

😈「CSDN主页」:传送门 😈「Bilibil首页」:传送门 😈「动动你的小手」:点赞👍收藏⭐️评论📝 文章目录 概述创建静态库添加静态库到你的项目完整代码示例实战使用技巧与注意事项总结与分析概述 静态库在C++开发中扮演着重要的角色。它们通常以.a(在Unix-like系统

django websocket实现聊天室功能

注意事项channel版本 django2.x 需要匹配安装 channels 2 django3.x 需要匹配安装 channels 3 Django3.2.4 channels3.0.3 Django3.2.* channels3.0.2 Django4.2 channles3.0.5 是因为最新版channels默认不带daphne服务器 直接用命令 python manage.py runsever 默认运行的是w…

python协程asyncio的应用,async,await,loop

关于协程&#xff0c;asyncio&#xff0c;async&#xff0c;await&#xff0c;loop的概念&#xff0c;参照上一篇文章可迭代对象&#xff0c;迭代器&#xff0c;生成器&#xff0c;协程-CSDN博客 上一章我们详细的讲解了上述各个名词的概念&#xff0c;但是这些东西实际上该怎…

Dash+Plotly | Web应用开发(1)

本文为https://github.com/CNFeffery/DataScienceStudyNotes的学习笔记&#xff0c;部分源码来源于此仓库。 本期内容主要为基础概念、web布局方法和交互回调。 文章目录 Dash的主要模块Highlightlayoutcallback 惰性交互阻止初次回调忽略回调匹配错误控制部分回调输出不更新获…

计算机毕业设计----SSM场地预订管理系统

项目介绍 本项目分为前后台&#xff0c;前台为普通用户登录&#xff0c;后台为管理员登录&#xff1b; 用户角色包含以下功能&#xff1a; 按分类查看场地,用户登录,查看网站公告,按分类查看器材,查看商品详情,加入购物车,提交订单,查看订单,修改个人信息等功能。 管理员角…

linux安装codeserver实现云端开发

先看图 下载安装包 https://github.com/coder/code-server/releases 找到code-server-版本号-linux-amd64.tar.gz&#xff0c;我这里是code-server-4.16.1-linux-amd64.tar.gz 1、使用acrm用户登录目标服务器 2、切换root用户&#xff0c;创建 vscode 用户&#xff0c;并设…

selenium对于页面改变的定位元素处理办法

在学习selenimu中&#xff0c;总是发现元素定位不到&#xff0c;想了各种办法&#xff0c;最后总结大致有两个原因。 1.等待时间不够&#xff0c;页面还没有完全渲染就进行操作&#xff0c;使用time模块进行等待。 2.换了页面后&#xff0c;发现定位不到元素&#xff0c;因为…

外包做了1个月,技术退步一大半了。。。

先说一下自己的情况&#xff0c;本科生&#xff0c;20年通过校招进入深圳某软件公司&#xff0c;干了接近4年的功能测试&#xff0c;今年年初&#xff0c;感觉自己不能够在这样下去了&#xff0c;长时间呆在一个舒适的环境会让一个人堕落!而我已经在一个企业干了四年的功能测试…

新颖度爆表。网络药理学+PPI+分子对接+实验验证

今天给同学们分享一篇生信文章“The convergent application of metabolites from Avena sativa and gut microbiota to ameliorate non-alcoholic fatty liver disease: a network pharmacology study”&#xff0c;这篇文章发表在J Transl Med期刊上&#xff0c;影响因子为7.…

LeetCode-58/709

1.最后一个单词的长度&#xff08;58&#xff09; 题目描述&#xff1a; 给你一个字符串 s&#xff0c;由若干单词组成&#xff0c;单词前后用一些空格字符隔开。返回字符串中 最后一个 单词的长度。 单词 是指仅由字母组成、不包含任何空格字符的最大子字符串。 思路&…

如何创建容器搭建节点

1.注册Discord账号 https://discord.com/这是登录网址: https://discord.com/ 2.点击startnow注册,用discord注册或者邮箱注册都可,然后登录tickhosting Tick Hosting这是登录网址:Tick Hosting 3.创建servers 4.点击你创建的servers,按照图中步骤进行