vue长列表渲染_vue 二维数组渲染

vue长列表渲染_vue 二维数组渲染循环在模板中可以用v-for指令来循环数组,对象等。循环数组我们可以用v-for指令基于一个数组来渲染一个列表。v-for指令需要使用iteminitems形式的特殊语法,其中it

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

循环

在模板中可以用v-for指令来循环数组,对象等。
 

循环数组

我们可以用 v-for 指令基于一个数组来渲染一个列表。v-for 指令需要使用 item in items形式的特殊语法,其中 items 是源数据数组,而 item 则是被迭代的数组元素的别名。

<div id="app">
<ul>
  <li v-for="item in items">{{item.message}}</li>
</ul>
</div>
<script>
  const app = new Vue({
    el: "#app",
    data: {
      items: [
        {message: 'Hello'},
        {message: 'World'},
      ]
    }
  })
</script>

结果:

Hello
World

 
v-for 还支持一个可选的第二个参数,即当前项的索引。

<div id="app">
<ul>
  <li v-for="(item, index) in items">{{index+1}}.{{item.message}}</li>
</ul>
</div>

注意:索引index是放在item之后
结果:

1.Hello
2.World

你也可以用 of 替代 in 作为分隔符,因为它更接近 JavaScript 迭代器的语法:

<div v-for="item of items"></div>

 

循环对象

循环对象跟循环数组是一样的。并且都可以在循环的时候使用接收多个参数。示例代码如下:

<div id="app">
    <div v-for="value in person">
        {{value}}
    </div>
</div>
<script>
    let vm = new Vue({
        el: "#app",
        data: {
            person: {
                "username": "甲壳虫",
                "age": 18,
                "homepage": "https://www.cnblogs.com/jiakecong/"
            }
        }
    });
</script>

结果:

甲壳虫
18
https://www.cnblogs.com/jiakecong/

你也可以提供第二个的参数为 property 名称 (也就是键名):

<div v-for="(value, key) in person">
  {{key}}:{{value}}
</div>

结果:

username:甲壳虫
age:18
homepage:https://www.baidu.com/

还可以用第三个参数作为索引:

<div v-for="(value, key, index) in person">
  {{index}}.{{key}}:{{value}}
</div>

结果:

0.username:甲壳虫
1.age:18
2.homepage:https://www.baidu.com/

 

保持状态:

循环出来的元素,如果没有使用key元素来唯一标识,如果后期的数据发生了更改,默认是会重用的,并且元素的顺序不会跟着数据的顺序更改而更改。比如:

<div id="app">
  <div v-for="book in books">
    <label for="book">{{book}}</label>
    <input type="text" :placeholder="book">
  </div>
  <button @click="changeBooks">更换图书</button>
</div>
<script>
  let vm = new Vue({
    el: "#app",
    data: {
      books: ['三国演义','水浒传','红楼梦','西游记']
    },
    methods: {
      changeBooks: function(event){
        this.books.sort((x,y) => {
          return 5 - parseInt(Math.random()*10)
        });
      }
    }
  });
</script>

我们会发现,如果我们在input标签中输入了值,然后点击更换图书,你会发现即使数据更改了,input并不会跟着数据的更改而更改
vue长列表渲染_vue 二维数组渲染
这时候我们只需要在v-for的时候加上一个key属性就可以了。示例代码如下:

<div v-for="(book,index) in books" v-bind:key="book">
    <label for="book">{{book}}</label>
    <input type="text" v-bind:placeholder="book">
</div>

vue长列表渲染_vue 二维数组渲染
注意,key只能是整形,或者是字符串类型,不能为数组或者对象。
 

触发视图更新:

Vue对一些方法进行了包装和变异,以后数组通过这些方法进行数组更新,会出发视图的更新。这些方法如下:

1.push():添加元素的方法。

this.books.push("甲壳虫")

2.pop():删除数组最后一个元素。

 this.books.pop()

3.shift():删除数组的第一个元素

this.books.shift()

4.unshift(item):在数组的开头位置添加一个元素

this.books.unshift("甲壳虫")

5.splice(start: number, deleteCount: number, ...items: T[]):向数组中添加或者删除或者替换元素

  • start参数代表从第几个下标开始
  • deleteCount代表删除几个数,可以为0代表不删
  • items代表增加的对象
 // 向books第0个位置添加元素
 this.books.splice(0,0,"甲壳虫")
 // 下标从0开始,删除2个元素
 this.books.splice(0,2)
 // 下标从0开始,替换2个元素
 this.books.splice(0,2,'甲壳虫','aaaa')

 

6.sort(function):排序

 this.books.sort(function(x,y){
     // 取两个随机数排序
     a = Math.random();
     b = Math.random();
     return a-b;
 });

7.reverse():将数组元素进行反转

this.books.reverse();

还有一些Vue没有包装的方法,比如filterconcatslice,如果使用这些方法修改了数组,那么只能把修改后的结果重新赋值给原来的数组才能生效。比如:

this.books = this.books.filter(function(x){
    return x.length>3?false:true;
})

 

视图更新注意事项

1.直接修改数组中的某个值是不会出发视图更新的。比如:

this.books[0] = '甲壳虫';

这种情况应该改成用splice或者是用Vue.set方法来实现:

Vue.set(this.books,0,'甲壳虫');

2.如果动态的给对象添加属性,也不会触发视图更新。只能通过Vue.set来添加。比如:

<div id="app">
<ul>
  <li v-for="(value,name) in person" @click="changePerson">{{name}}:{{value}}</li>
</ul>
</div>
<script>
  let app = new Vue({
    el: "#app",
    data: {
      person: {"username": '甲壳虫'}
    },
    methods: {
      changePerson: function(event){
        // 直接修改this.person.age是没有效果的
        // this.person.age = 18;
        Vue.set(this.person,'age',18)
      }
    }
  });
</script>
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/165399.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 测试用例模板和例子_测试用例怎么写 实例

    测试用例模板和例子_测试用例怎么写 实例编写测试用例HttpRunnerv3.x支持三种测试用例格式pytest,YAML和JSON。官方强烈建议以pytest格式而不是以前的YAML/JSON格式编写和维护测试用例格式关系如下图所示

    2022年8月6日
    1
  • strstr(str1,str2)函数使用时注意事项

    strstr(str1,str2)函数使用时注意事项可能有的人还没听过strstr函数,个人认为这个一个很实用的函数,strstr(str1,str2)函数是字符串处理函数之一,位于头文件“string.h”中。对于处理字符串的一些问题有很大的帮助。定义:strstr(str1,str2)函数用于判断字符串str2是否是str1的子串。如果是,则该函数返回str2在str1中首次出现的地址;否则,返回NULL。定义说的有点羞涩难懂。举个例子就…

    2022年6月25日
    33
  • 腾讯七大事业群_腾讯pcg事业群难进吗

    腾讯七大事业群_腾讯pcg事业群难进吗企业发展事业群(CorporateDevelopmentGroup,简称CDG)意如其名,企业发展事业群CDG在腾讯内部担当战略规划、投资者关系维护、业务孵化和投资并购等角色。众所周知的微信、财付通、QQ邮箱等业务均属CDG,诸多投资工作也由CDG负责,比如国内外投资并购、海外市场推广等工作,有志于股权投资、创新业务、国际化并拥有专长的同学可格外关注!互动娱乐事业群(I

    2022年9月14日
    0
  • app数据库表的设计_订单数据库设计

    app数据库表的设计_订单数据库设计近期公司要着手一个商城的项目,后台那边暂时有项目。让我设计一下数据库。这是我总结设计的,记录下日后完善。

    2022年9月12日
    0
  • c++使用json_qt读写json文件

    c++使用json_qt读写json文件目录前言一、json文件简介1、json文件2、json与其他存储数据方式比较二、C++操作json文件1、jsoncpp库下载2、C++从字符串中读取json3、C++从文件中读取json4、C++写入json文件5、主函数附:jsoncpp库配置1、解压并转移2、配置属性3、配置项目前言json文件是比较轻量级的文件,格式简单…

    2022年10月12日
    0
  • 用户态与内核态之间切换详解[通俗易懂]

    用户态与内核态之间切换详解[通俗易懂]用户态切换到内核态CPU中有一个标志字段,标志着线程的运行状态。用户态和内核态对应着不同的值,用户态为3,内核态为0.每个线程都对应着一个用户栈和内核栈,分别用来执行用户方法和内核方法。用户方法就是普通的操作。内核方法就是访问磁盘、内存分配、网卡、声卡等敏感操作。当用户尝试调用内核方法的时候,就会发生用户态切换到内核态的转变。切换流程:1、每个线程都对应这一个TCB,TCB中有一个TSS字段,存储着线程对应的内核栈的地址,也就是内核栈的栈顶指针。2、因为从用户态切换到内核态时,需要将用户态.

    2022年9月17日
    0

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号