vue学习七(v-for数组和对象、v-if、监测索引值、监测对象属性增删、副本、组件v-for)

本文主要是介绍vue学习七(v-for数组和对象、v-if、监测索引值、监测对象属性增删、副本、组件v-for),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

      • 用 v-for 将数组对应为一组元素
      • 一个对象的 v-for
      • key复用
      • 数组利用索引设置项值
      • 对象属性的添加或删除
      • 显示过滤/排序结果
      • v-for on a template
      • v-for with v-if
      • 组件v-for

用 v-for 将数组对应为一组元素

在 v-for 块中,我们拥有对父作用域属性的完全访问权限。v-for 还支持一个可选的第二个参数为当前项的索引

    <ul id="example-2"><li v-for="(item, index) in items">{{ parentMessage }} - {{ index }} - {{ item.message }}</li></ul><script type="text/javascript">var example2 = new Vue({el: '#example-2',data: {parentMessage: 'Parent',items: [{ message: 'Foo' },{ message: 'Bar' }]}})</script>

渲染为:

Parent - 0 - Foo
Parent - 1 - Bar

上述也可以利用如下的写法,可以用 of 替代 in 作为分隔符

    <ul id="example-3"><li v-for="(item, index) of items">{{ parentMessage }} - {{ index }} - {{ item.message }}</li></ul>

一个对象的 v-for

你也可以用 v-for 通过一个对象的属性来迭代。

    <ul id="v-for-object" class="demo"><li v-for="(value, key, index) in object">{{ index }}. {{ key }}: {{ value }}</li></ul><script type="text/javascript">new Vue({el: '#v-for-object',data: {object: {firstName: 'John',lastName: 'Doe',age: 30}}})</script>

浏览器渲染结果如下:

0. firstName: John
1. lastName: Doe
2. age: 30

key复用

为了给 Vue 一个提示,以便它能跟踪每个节点的身份,从而重用和重新排序现有元素,你需要为每项提供一个唯一 key 属性。理想的 key 值是每项都有的唯一 id。这个特殊的属性相当于 Vue 1.x 的 track-by ,但它的工作方式类似于一个属性,所以你需要用 v-bind 来绑定动态值 (在这里使用简写):

<div v-for="item in items" :key="item.id"><!-- 内容 -->
</div>

建议尽可能在使用 v-for 时提供 key,除非遍历输出的 DOM 内容非常简单,或者是刻意依赖默认行为以获取性能上的提升。
因为它是 Vue 识别节点的一个通用机制,key 并不与 v-for 特别关联,key 还具有其他用途

数组利用索引设置项值

由于 JavaScript 的限制,Vue 不能检测以下变动的数组:

当你利用索引直接设置一个项时,例如:vm.items[indexOfItem] = newValue
当你修改数组的长度时,例如:vm.items.length = newLength
举个例子

var vm = new Vue({data: {items: ['a', 'b', 'c']}
})
vm.items[1] = 'x' // 不是响应性的
vm.items.length = 2 // 不是响应性的

以下两种方式都可以实现和 vm.items[indexOfItem] = newValue 相同的效果,同时也将触发状态更新

// Vue.set
Vue.set(vm.items, indexOfItem, newValue)// Array.prototype.splice
vm.items.splice(indexOfItem, 1, newValue)
    <div id="div1"><p v-for="item in items">{{item}}</p></div><script type="text/javascript">var vm = new Vue({el: "#div1",data: {items: ['a', 'b', 'c']}})// 解决vm.items[1] = 'x' // 不是响应性的Vue.set(vm.items, 1, "d")vm.items.splice(0, 1, "dd");vm.$set(vm.items, 2, "cc");// 解决vm.items.length = 2 // 不是响应性的vm.items.splice(5)</script>

浏览器渲染输出

dddcc

对象属性的添加或删除

还是由于 JavaScript 的限制,Vue 不能检测对象属性的添加或删除:

var vm = new Vue({data: {a: 1}
})
// `vm.a` 现在是响应式的vm.b = 2
// `vm.b` 不是响应式的

我们来看下面的例子

<ul id="div2"><li v-for="(value, key) in userProfile">{{ key }}: {{ value }}</li></ul><script type="text/javascript">var vm = new Vue({el: "#div2",data: {userProfile: {name: 'Anika'}}})Vue.set(vm.userProfile, 'age', 27);vm.$set(vm.userProfile, 'sex', "男");// 有时你可能需要为已有对象赋予多个新属性,比如使用 Object.assign() 或 _.extend()vm.userProfile = Object.assign({}, vm.userProfile, {ager: 27,favoriteColor: 'Vue Green'})</script>

渲染输出如下:

name: Anika
age: 27
sex: 男
ager: 27
favoriteColor: Vue Green

显示过滤/排序结果

我们想要显示一个数组的过滤或排序副本,而不实际改变或重置原始数据。在这种情况下,可以创建返回过滤或排序数组的计算属性

<ol id= "div3"><li  v-for="n in evenNumbers">{{ n }}</li></ol><script type="text/javascript">new Vue({el:"#div3",data: {numbers: [ 1, 2,3,4,5]},computed: {evenNumbers: function () {return this.numbers.filter(function (number) {console.log(number)return number % 2 === 0})}}})</script>

在计算属性不适用的情况下 (例如,在嵌套 v-for 循环中) 你可以使用一个 method 方法:
或者如下的例子也可以

<ol id= "div4"><li v-for="n in even(numbers)">{{ n }}</li></ol><script type="text/javascript">new Vue({el:"#div4",data: {numbers: [ 1, 2, 3, 4, 5 ]},methods: {even: function (numbers) {return this.numbers.filter(function (number) {return number % 2 === 0})}}})</script>

v-for on a template

类似于 v-if,你也可以利用带有 v-for 的 渲染多个元素。比如:

   <ul id="ul"><template v-for="item in items"><li>{{ item.msg }}</li><li class="divider"></li></template></ul><script type="text/javascript">new Vue({el:"#ul",data:{items:[{msg:"a"},{msg:"b"}]}})</script>

渲染输出如下:

a
b

v-for with v-if

 <div id="forAndIf"><ul><li v-for="todo in todos" v-if="todo!=='isb'"><!-- v-if='todo!=='isb' 用来判断 todos中的属性值是否为字符串isb,若不是则显示。此外v-if的属性值若设置为以下的数据对应显示的结果:0,false,null ,undefined 显示为空白1,2,‘’,true   显示为全部属性值说到底,v-if是一个判断语句,若为真则显示,为假不显示。-->{{todo}}</li></ul></div><script>var forif = new Vue({el: '#forAndIf',data: {todos: {ist: 'ff',isb: 'isb',iss: 'iss'}}})</script>

渲染输出如下:

ff
iss

组件v-for

任何数据都不会被自动传递到组件里,因为组件有自己独立的作用域。为了把迭代数据传递到组件里,我们要用 props

    <div id="todo-list-example"><form v-on:submit.prevent="addNewTodo"><label for="new-todo">Add a todo</label><input v-model="newTodoText" id="new-todo" placeholder="E.g. Feed the cat"><button>Add</button></form><ul><li is="todo-item" v-for="(todo, index) in todos" v-bind:key="todo.id" v-bind:title="todo.title" v-on:remove="todos.splice(index, 1)"></li></ul></div><script>Vue.component('todo-item', {template: '\<li>\{{ title }}\<button v-on:click="$emit(\'remove\')">Remove</button>\</li>\',props: ['title']})new Vue({el: '#todo-list-example',data: {newTodoText: '',todos: [{id: 1,title: 'Do the dishes',},{id: 2,title: 'Take out the trash',},{id: 3,title: 'Mow the lawn'}],nextTodoId: 4},methods: {addNewTodo: function () {this.todos.push({id: this.nextTodoId++,title: this.newTodoText})this.newTodoText = ''}}})</script>

效果图:
在这里插入图片描述

这篇关于vue学习七(v-for数组和对象、v-if、监测索引值、监测对象属性增删、副本、组件v-for)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1125119

相关文章

Vue3 的 shallowRef 和 shallowReactive:优化性能

大家对 Vue3 的 ref 和 reactive 都很熟悉,那么对 shallowRef 和 shallowReactive 是否了解呢? 在编程和数据结构中,“shallow”(浅层)通常指对数据结构的最外层进行操作,而不递归地处理其内部或嵌套的数据。这种处理方式关注的是数据结构的第一层属性或元素,而忽略更深层次的嵌套内容。 1. 浅层与深层的对比 1.1 浅层(Shallow) 定义

HarmonyOS学习(七)——UI(五)常用布局总结

自适应布局 1.1、线性布局(LinearLayout) 通过线性容器Row和Column实现线性布局。Column容器内的子组件按照垂直方向排列,Row组件中的子组件按照水平方向排列。 属性说明space通过space参数设置主轴上子组件的间距,达到各子组件在排列上的等间距效果alignItems设置子组件在交叉轴上的对齐方式,且在各类尺寸屏幕上表现一致,其中交叉轴为垂直时,取值为Vert

Ilya-AI分享的他在OpenAI学习到的15个提示工程技巧

Ilya(不是本人,claude AI)在社交媒体上分享了他在OpenAI学习到的15个Prompt撰写技巧。 以下是详细的内容: 提示精确化:在编写提示时,力求表达清晰准确。清楚地阐述任务需求和概念定义至关重要。例:不用"分析文本",而用"判断这段话的情感倾向:积极、消极还是中性"。 快速迭代:善于快速连续调整提示。熟练的提示工程师能够灵活地进行多轮优化。例:从"总结文章"到"用

JS常用组件收集

收集了一些平时遇到的前端比较优秀的组件,方便以后开发的时候查找!!! 函数工具: Lodash 页面固定: stickUp、jQuery.Pin 轮播: unslider、swiper 开关: switch 复选框: icheck 气泡: grumble 隐藏元素: Headroom

这15个Vue指令,让你的项目开发爽到爆

1. V-Hotkey 仓库地址: github.com/Dafrok/v-ho… Demo: 戳这里 https://dafrok.github.io/v-hotkey 安装: npm install --save v-hotkey 这个指令可以给组件绑定一个或多个快捷键。你想要通过按下 Escape 键后隐藏某个组件,按住 Control 和回车键再显示它吗?小菜一碟: <template

水位雨量在线监测系统概述及应用介绍

在当今社会,随着科技的飞速发展,各种智能监测系统已成为保障公共安全、促进资源管理和环境保护的重要工具。其中,水位雨量在线监测系统作为自然灾害预警、水资源管理及水利工程运行的关键技术,其重要性不言而喻。 一、水位雨量在线监测系统的基本原理 水位雨量在线监测系统主要由数据采集单元、数据传输网络、数据处理中心及用户终端四大部分构成,形成了一个完整的闭环系统。 数据采集单元:这是系统的“眼睛”,

【 html+css 绚丽Loading 】000046 三才归元阵

前言:哈喽,大家好,今天给大家分享html+css 绚丽Loading!并提供具体代码帮助大家深入理解,彻底掌握!创作不易,如果能帮助到大家或者给大家一些灵感和启发,欢迎收藏+关注哦 💕 目录 📚一、效果📚二、信息💡1.简介:💡2.外观描述:💡3.使用方式:💡4.战斗方式:💡5.提升:💡6.传说: 📚三、源代码,上代码,可以直接复制使用🎥效果🗂️目录✍️

【前端学习】AntV G6-08 深入图形与图形分组、自定义节点、节点动画(下)

【课程链接】 AntV G6:深入图形与图形分组、自定义节点、节点动画(下)_哔哩哔哩_bilibili 本章十吾老师讲解了一个复杂的自定义节点中,应该怎样去计算和绘制图形,如何给一个图形制作不间断的动画,以及在鼠标事件之后产生动画。(有点难,需要好好理解) <!DOCTYPE html><html><head><meta charset="UTF-8"><title>06

学习hash总结

2014/1/29/   最近刚开始学hash,名字很陌生,但是hash的思想却很熟悉,以前早就做过此类的题,但是不知道这就是hash思想而已,说白了hash就是一个映射,往往灵活利用数组的下标来实现算法,hash的作用:1、判重;2、统计次数;

性能分析之MySQL索引实战案例

文章目录 一、前言二、准备三、MySQL索引优化四、MySQL 索引知识回顾五、总结 一、前言 在上一讲性能工具之 JProfiler 简单登录案例分析实战中已经发现SQL没有建立索引问题,本文将一起从代码层去分析为什么没有建立索引? 开源ERP项目地址:https://gitee.com/jishenghua/JSH_ERP 二、准备 打开IDEA找到登录请求资源路径位置