绑定class,条件渲染,列表过滤,列表排序

目录​​​​​​​

绑定class

条件渲染

列表过滤

列表排序

绑定class

<div class="normal" :class="mood" @click="changename">111{{name}}</div>
        <div class="normal" :class="arr">111{{name}}</div>

本来class只能出现一个,但是现在:class代表绑定,后面是表达式就行

dom操作通过vue实例里data来动态绑定

1 如果class后是对象,说明参数个数和名字都确定

2 后是数组,说明动态绑定

3 后是字符串

<script type="text/javascript">
    Vue.config.productionTip = false
    const vm = new Vue({
        el: '#root',
        data: {
            name: 'what',
            mood: 'normal',
            arr: ['happy', 'sad']
        },
        methods: {
            changename() {
                alert('i change')
                this.mood = 'happy'
                // 不用操作dom,只要把与vue关联的数据改了,让vue来操作dom
            }
        }
        // vm.arr.shift()移除数组第一个元素


    })

</script>

条件渲染

v-show后面是表达式,并且是display为none不是真的删除

但是v-if后面表达式,则没的很彻底

<h2 v-if="false">111</h2>
<body>
    <div id="root">
        <h2 v-show="1===3">333{{name}}</h2>

    </div>

</body>
<script type="text/javascript">
    Vue.config.productionTip = false
    const vm = new Vue({
        el: '#root',
        data: {
            name: 'fansi'
        }
    })

</script>

简单交互,点击后n自增

<h2>{{n}}</h2>
<h2 v-show="1===1" @click="n++">{{name}}dianwo</h2>


const vm = new Vue({
        el: '#root',
        data: {
            name: 'fansi',
            n: 0
        }
    })

 <div id="root">
        <h2>{{n}}</h2>
        <button @click="n++">dianwo{{n}}</button>
        <h2 v-show="n===1">react</h2>
        <h2 v-show="n===2">angular</h2>
        <h2 v-show="n===3">vue</h2>

很高的变化频率用v-show

v-else-if

v-else后面别跟条件

如果用v-if,v-else-if,v-else则三者之间不能被打断,即插入别的,不然打断后面的都不奏效

如果想一系列同时出现,用template,不影响结构

<template v-if="1===1">
        <h2>11</h2>
        <h2>12</h2>
        <h2>13</h2>
    </template>

但是template只能配合v-if不能配合v-show

v-for

v-for加在谁身上遍历谁,数组长度多长就多少次

总结:

1 用于展示列表数据

2 v-for="(item,index) in xxx" :key="xxx"

3 可遍历:数组,对象,字符串

<body>
    <div id="root">
        <h2>人员列表</h2>
        <ul>
            <li v-for="p in persons" :key="p.id">
                <!-- 让每个li都有了唯一的标识? -->
                {{p.name}}-{{p.age}}
                姓名-年龄
            </li>
            <li v-for="(p,index) in persons" :key="index">
                {{p.name}}--{{p.age}}
                <!-- 这里key其实只要找一个对每次生成的标识都会不一样的东西就行 -->
            </li>
            <!-- v帮你循环,person理解为形参,persons长度是多少就能生成多少个li -->

        </ul>

        <!-- 遍历对象 -->

        <ul>
            <li v-for="p in persons" :key="p.id">
                <!-- 让每个li都有了唯一的标识? -->
                {{p.name}}-{{p.age}}
                姓名-年龄
            </li>
            <li v-for="(value,k) of car" :key="k">
                <!-- 这里in和of都行,先收到的是value -->
                {{k}}--{{value}}
                <!-- 这里key其实只要找一个对每次生成的标识都会不一样的东西就行 -->
            </li>
            <!-- v帮你循环,person理解为形参,persons长度是多少就能生成多少个li -->

        </ul>
        <!-- 测试遍历指定次数 -->
        <ul>
            <li v-for="(a,b) of 5" :key="b">
                <!-- 让每个li都有了唯一的标识? -->
                {{a}}-{{b}}
                <!-- a就是从1开始计数,b从0开始计数但是b就是index索引值 -->
                姓名-年龄
            </li>
            <li v-for="(value,k) of car" :key="k">
                <!-- 这里in和of都行,先收到的是value -->
                {{k}}--{{value}}
                <!-- 这里key其实只要找一个对每次生成的标识都会不一样的东西就行 -->
            </li>
            <!-- v帮你循环,person理解为形参,persons长度是多少就能生成多少个li -->

        </ul>

    </div>


</body>
<script type="text/javascript">
    Vue.config.productionTip = false
    const vm = new Vue({
        el: '#root',
        data: {
            persons: [
                { id: '001', name: 'zhangsn', age: 18 },
                { id: '002', name: 'lisi', age: 18 },
                { id: '003', name: 'wangw', age: 20 }
            ],
            car: {
                name: 'aodi',
                price: '70',
                color: 'pink'
            }

        }
    })

</script>

如果key写了该怎么处理:虚拟dom对比算法(diff)

如果没写key该怎么处理:将遍历时候的索引值index自动作为key

react,vue中的key有什么用:
1 虚拟dom中key作用:数据变化时候,vue根据新数据生成新的虚拟dom
如果旧的虚拟dom找到与新的虚拟dom相同的key,如果内容没变直接使用已经转的真实dom(复用dom节点)
-对比key一样但内容不一样,还有就是旧的没找到,直接创新的

将index作为key:如果对数据进行逆序添加,逆序删除等破坏顺序操作,产生没有必要的dom更新,效率低;一旦有输入类dom(input等),就会串行


最好使用能够唯一标识的作为key

列表过滤

1用watch实现:

解决问题关键:过滤条件为空''时候返回的是整个数组

所以用watch完整形式实现,加了immediate能在一开始输入为空时候就执行一次handler

用indexOf表示返回数组里是否包含某个值

const vm = new Vue({
            el: '#root',
            data: {
                keyWord: '',
                persons: [
                    { id: '001', name: '马冬梅', age: 18 },
                    { id: '002', name: '周冬雨', age: 19 },
                    { id: '003', name: '周杰伦', age: 18 }
                ], filpersons: []

            },
            watch: {
                keyWord: {
                    immediate: true,
                    //不等输入已经调用一次handler
                    handler(val) {
                        this.filpersons = this.persons.filter((p) => {
                            // p是每个人的对象
                            return p.name.indexOf(val) !== -1//判断是否包含用indexof,只要不等于-1
                            //filter会返回一个全新数组,persons变了重新解析模板
                        })
                    }
                    // 非常关键点:在一个数组上indexof一个''空字符串出来的是0
                }
            }
        })

新建一个filpersons存过滤后的数组,由于filter函数是通过返回新的数组但对原数组没有修改的方式进行过滤的

indexof意思是找数组里是否包含val并返回index值,只要不是-1就意味着有

2 computed实现(能用computed实现尽量用从他)

出现问题:watch实现能获得用户输入的新旧值,computed可以通过this.keyword来获得

#region 和#endregion在vscode里能让一段代码隐藏

const vm = new Vue({
        el: '#root',
        data: {
            keyWord: '',
            persons: [
                { id: '001', name: '马冬梅', age: 18 },
                { id: '002', name: '周冬雨', age: 19 },
                { id: '003', name: '周杰伦', age: 18 }
            ]

        },
        computed: {
            filpersons() {
                return this.persons.filter((p) => {
                    return p.name.indexOf(this.keyWord) !== -1
                    //判断是否包含用indexof,只要不等于-1
                    //                         //filter会返回一个全新数组,persons变了重新解析模板
                })
                // 注意只有监控时候能收到新旧值,新数组值作为filperson的值,直接return
                // 第一个return是计算属性规定的,第二个return是filter规定的,只有返回值才知道filperson是什么
            }
        }


    })

列表排序

注意,对于数组排序:

arr=[1,2,4,3,5,3]
arr.sort((a,b)=>{
return a-b
}
)

这里a和b是获得的前后两个项,现在a-b是升序

 <input type="text" placeholder="input please" v-model="KeyWord">
        <button @click="sortType=2">increase sort</button>
        <button @click="sortType=1">decrease sort</button>
        <button @click="sortType=0">origin</button>
new Vue({
        el: '#root',
        data: {
            keyWord: '',
            sortType: 0,
            persons: [
                { id: '001', name: '马冬梅', age: 18 },
                { id: '002', name: '周冬雨', age: 19 },
                { id: '003', name: '周杰伦', age: 18 }
            ]

        },
        computed: {
            filpersons() {
              const arr =  this.persons.filter((p) => {
                    return p.name.indexOf(this.keyWord) !== -1
                    //判断是否包含用indexof,只要不等于-1
                    //                         //filter会返回一个全新数组,persons变了重新解析模板
                })
                // 注意只有监控时候能收到新旧值,新数组值作为filperson的值,直接return
                // 第一个return是计算属性规定的,第二个return是filter规定的,只有返回值才知道filperson是什么
                // 先过滤再排序
                if(this.sortType){
                    arr.sort((a,b)=>{
                        return this.sortType===1?p2.age-p1.age: p1.age - p2.age

// sort排序能收到前后两个数据项
                    })
                }
                return arr
            }
        }


    })

</script>

加了两个按钮,data里一个sorttype进行判断,注意computed要返回值

vue里的监控功能

Object.defineProperty(data,'name',{
	get(){
	return data.name
	读溢出,改uncaught
	原因:你想获取值调用get,调用get后又return data.name意味着又要调用get进入死循环,set也是同理
	},
	set(val){

	}
const obs=new Observer(data)创建一个监视的实例对象,监视data中属性变化

function observer(obj){
const keys=object.keys()
	
}

可以用observer进行模拟

通过setter实现监视,要在new vue时候就传入要检测的数据
对象后追加属性,vue默认不响应式处理
why:_data收集data中数据前先加工,给每个数据匹配一个getter和setter

vue.set只能给data某个对象增加属性,不能对vm或者vm根数据对象增加属性
如果要响应式处理:

vue.set(target,propertyname/index,value)
vm.$set(target,propertyname/index,value)
<h2>{{whatt}}</h2>
<div @click="addwhat">123</div>
methods:{
	addwhat(){
	Vue.set(this.whatt,
	'name','guess')
	}
}

vue检测数组中数据
vue修改数组中某个元素实现响应式一定用如下方法:
api:(1)push(),pop(),shift(),unshift(),splice(),sort(),reverse()
(2)vue.set()/vm.$set也能实现响应式第二个参数写索引,第三个写元素

总结:
1 单独改每个属性,因为vue能检测到对象里每个属性
2 将数组中元素单独替换,数据修改成功但vue不能检测到,因为数组元素没有getter和setter,修改数组中元素无法实现响应式
3 更改数组实现响应式,应该调用数组api或者vue.set

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

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

相关文章

AI嵌入式K210项目(15)-安全散列算法加速器

文章目录 前言一、什么是SHA256&#xff1f;实验原理 二、K210的安全散列算法加速器三、实验过程总结 前言 K210内置了丰富的加速器&#xff0c;包括神经网络处理器 (KPU)&#xff0c;AES(高级加密加速器)&#xff0c;APU 麦克风阵列语音数据加速计算处理器&#xff0c;现场可…

计算机网络-ACL访问控制列表

上一篇介绍NAT时候就看到了ACL这个东西了&#xff0c;这个是什么意思&#xff1f;有什么作用呢&#xff1f; 一、ACL访问控制列表 访问控制列表 (ACL, Access Control List)是由一系列permit或deny语句组成的、有序规则的列表。ACL是一个匹配工具&#xff0c;能够对报文进行匹配…

前端学习路线图和一些经验

关于前端目前个人建议的一个路线,也是自己之前前端学习时候的一个大致路线,给想要学习前端的小白一个参考,以前自己刚开始接触前端的时候就是不知道该按照什么路线学习 eg-前端是做什么的&#xff1f; 就是开发网站,移动端&#xff0c;小程序之类的页面 调调接口完成页面的渲…

异步非阻塞事件驱动架构的具体流程解析

异步非阻塞事件驱动架构是一种高效的编程和系统设计模式&#xff0c;特别适用于需要处理大量并发连接和请求的应用&#xff0c;如Web服务器。 1. 初始化和启动 启动过程&#xff1a;当Nginx启动时&#xff0c;它的主进程初始化配置并启动多个工作进程。工作进程创建&#xff1…

虚拟线程探索与实践

优质博文&#xff1a;IT-BLOG-CN 一、简介 虚拟线程是轻量级线程&#xff0c;极大地减少了编写、维护和观察高吞吐量并发应用的工作量。虚拟线程是由JEP 425提出的预览功能&#xff0c;并在JDK 19中发布&#xff0c;JDK 21中最终确定虚拟线程&#xff0c;以下是根据开发者反馈…

杂记 | 在Linux上使用Docker-compose安装单机版Milvus向量数据库并配置访问控制和可视化面板(Attu)

文章目录 01 Milvus向量数据库简介02 安装前的准备03 安装3.1 创建milvus工作目录3.2 下载并编辑docker-compose.yml3.3 下载milvus.yml文件3.4 启动milvus 04 访问可视化面板并修改密码 01 Milvus向量数据库简介 Milvus是一款开源的向量数据库&#xff0c;它专为AI应用设计&a…

移动端 h5-table react版本支持虚拟列表

介绍 适用于 react ts 的 h5 移动端项目 table 组件 github 链接 &#xff1a;https://github.com/duKD/react-h5-table 有帮助的话 给个小星星 有两种表格组件 常规的&#xff1a; 支持 左侧固定 滑动 每行点击回调 支持 指定列排序 支持滚动加载更多 效果和之前写的vue…

聚类模型评估指标

聚类模型评估指标-轮廓系数 计算样本i到同簇其它样本到平均距离ai&#xff0c;ai越小&#xff0c;说明样本i越应该被聚类到该簇&#xff08;将ai称为样本i到簇内不相似度&#xff09;&#xff1b;计算样本i到其它某簇Cj的所有样本的平均距离bij&#xff0c;称为样本i与簇Cj的…

鉴源实验室|自动驾驶仿真测试技术分析

01 引言 随着科技的不断发展&#xff0c;自动驾驶技术逐渐成为汽车行业的热门话题。然而&#xff0c;要将自动驾驶车辆投放到真实道路上之前&#xff0c;必须进行广泛的测试&#xff0c;以确保其在各种情况下都能安全可靠地运行。自动驾驶车辆的测试是一个复杂而昂贵的过程。…

AQY212S光耦合器:特性和应用揭秘

在不断发展的电子元件领域&#xff0c;AQY212S光耦合器作为适合众多应用的多功能且可靠的解决方案脱颖而出。作为光耦合器技术专家&#xff0c;让我们深入研究AQY212S的功能和应用&#xff0c;揭开这款令人印象深刻的器件的神秘面纱。 AQY212S是一款固态继电器(SSR)光耦合器&a…

【docker-compose】【nginx】内网环境https配置

目录 1、openssl生成自签名证书和私钥2、nginx.conf配置ssl3、docker-compose挂载 1、openssl生成自签名证书和私钥 在部署服务器上&#xff0c;新建cert目录&#xff0c;执行以下指令&#xff0c;然后生成.crt和.key文件 openssl req -newkey rsa:2048 -nodes -keyout rsa_pri…

2023年全球软件架构师峰会(ArchSummit深圳站):核心内容与学习收获(附大会核心PPT下载)

本次峰会是一次重要的技术盛会&#xff0c;旨在为全球软件架构师提供一个交流和学习的平台。本次峰会聚焦于软件架构的最新趋势、最佳实践和技术创新&#xff0c;吸引了来自世界各地的软件架构师、技术专家和企业领袖。 在峰会中&#xff0c;与会者可以了解到数字化、AIGC、To…

指针定义与使用

系列文章目录 指针定义与使用 指针定义与使用 系列文章目录一、指针的定义与使用二、相关案例 一、指针的定义与使用 指针 指针的定义和使用&#xff1a; 1、指针&#xff1a;是一种数据类型 指针变量也是一种变量 int* p int*是数据类型 p是指针变量 2、指针格式&#xff1a;…

webpack面试题学习

说说你对webpack的理解&#xff1f;解决了什么问题&#xff1f; 说说webpack的构建流程? 说说webpack中常见的Loader&#xff1f;解决了什么问题&#xff1f; 说说webpack中常见的Plugin&#xff1f;解决了什么问题&#xff1f; 说说Loader和Plugin的区别&#xff1f;编写Load…

代码随想录 Leetcode459. 重复的子字符串(KMP算法)

题目&#xff1a; 代码&#xff08;首刷看解析 KMP算法 2024年1月18日&#xff09;&#xff1a; class Solution { public:void getNext(string& s,vector<int>& next) {int j 0;next[0] j;for (int i 1; i < s.size(); i) {while (j > 0 && s…

x-www-form-urlencoded接收方式代码示例

数据回推方式是 “x-www-form-urlencoded”&#xff0c;可以选择使用 GET 或 POST 方法来接收数据回推。 使用 GET 方法接收数据回推时&#xff0c;您可以将数据作为查询参数附加在请求的 URL 中。例如&#xff1a; http://example.com/callback?param1value1&param2val…

Redis高级系列-缓存双写一致性

Redis高级系列-缓存双写一致性 文章目录 Redis高级系列-缓存双写一致性1. 什么叫做缓存双写一致性&#xff1f;2. 缓存双写一致性有那些解决方案&#xff1f;2.1 Cache Aside Pattern(旁路缓存模式)延迟双删重试删除binlog订阅异步删除 2.2 Read Through/Write Through(读写穿透…

LightGlue: Local Feature Matching at Light Speed

一、论文概述 发表于&#xff1a; 2023 ICCV 作者信息&#xff1a;Philipp Lindenberger Paul-Edouard Sarlin Marc Pollefeys 对比算法&#xff1a;SuperGlue 代码&#xff1a;github.com/cvg/LightGlue 效果: 现有问题&#xff1a; 1&#xff09; SuperGlue 与其他基于 …

“尔滨”宠粉再升级!百亿像素VR冰雪盛宴

1月10日&#xff0c;由哈尔滨市委网信办、哈尔滨日报社主办&#xff0c;冰城客户端、哈尔滨新闻网承办的“激情迎亚冬&#xff0c;冰雪暖世界——2024年哈尔滨冰雪乐园”VR沉浸式体验产品正式上线。 如果你还没去过最近爆火出圈的“尔滨” ❄️这份哈尔滨冰雪景点VR❄️ 为你…