Vue---列表渲染

目录

一、列表渲染的基本使用

(1)渲染数组数据

(2)渲染对象数据

二、v-for指令的高级用法

三、列表过滤

四、列表排序


一、列表渲染的基本使用

使用v-for指令可以将数组,对象数据渲染成列表视图

(1)渲染数组数据

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <script src="../js/vue.js"></script>
</head>
<body>
    <div id="root">
       <!--渲染数组中的数据-->
        <ul>
            <!--i就是每个数组中的数据,list是数组-->
          <li v-for="i in list">{{i}}</li>
       </ul>
    </div>
    <script>
       const v=new Vue({
         data(){
            return{
                list:[3,1,19,6,78,100,2]
            }
         }
       })
       v.$mount('#root')
    </script>
</body>
</html>

(2)渲染对象数据

其中指令中的参数不仅仅可以只有一个。

一个参数时:

 i in list   i表示的是每个数据中的一个数据

两个参数时:

 (i,index) i表示的是每个数据中的一个数据,index是当前遍历的索引值,并且是从0开始(这个是究其来说还是数组)

三个参数时:

 (i,k,index) i表示的是每个数据中的一个数据,index是当前遍历的索引值,并且是从0开始;

k表示的是对象中的数据的键(这个是对象)

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <script src="../js/vue.js"></script>
</head>
<body>
    <div id="root">
       <!--渲染数组中的数据-->
       <p>两个参数</p>
        <ul>
            <!--这里的:key最好一定要,可以理解成为每一个列的唯一标识-->
           <li v-for="(i,index) in list" ::key="index">
             索引值={{index}}---{{i.name}}---{{i.age}}
           </li>   
       </ul>
       <hr>
        <p>三个参数时</p>
        <ul>
            <li v-for="(i,k,index) in person" :key="index">
                索引值={{index}}---键值={{k}}---值={{i}}
            </li>
        </ul>
    </div>
    <script>
       const v=new Vue({
         data(){
            return{
                list:[
                    {
                        name:'小红',
                        age:88
                    },
                    {
                        name:'大明',
                        age:17
                    },
                    {
                        name:'萨姆三',
                        age:36
                    },
                    {
                        name:'刘伟',
                        age:21
                    },
                    {
                        name:'张伟',
                        age:28
                    }
                ],
                person:{
                    name:'王五',
                    age:22,
                    phone:1729827323,
                    sex:'femail'
                }
            }
         }
       })
       v.$mount('#root')
    </script>
</body>
</html>

二、v-for指令的高级用法

push    //向列表尾部添加一个元素
pop     //删除列表尾部的一个元素
shift   //向列表头部插入一个元素
unshift //删除列表头部的一个元素
splice  //对列表进行分割操纵
sort    //列表排序
reverse //反转列表
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <script src="../js/vue.js"></script>
</head>
<body>
    <div id="root">
       <ul>
         <li v-for="i in list" :key="index">{{i}}</li>
       </ul>
       <hr>
       <button @click="add">添加</button>
    </div>
    <script>
       const v=new Vue({
         data(){
            return{
                list:[1,2,3,4,5]
            }
         },
         methods: {
            add(){
                this.list.push(100)
            }
         },
       })
       v.$mount('#root')
    </script>
</body>
</html>

三、列表过滤

需求:在输入框输入关键字,列表渲染对应的关键字

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <script src="../js/vue.js"></script>
</head>
<body>
    <div id="root">
       <input placeholder="请输入姓名" v-model="k">
       <ul>
           <li v-for="(i,index) in fillist" ::key="index">
            {{i.name}}---{{i.age}}
           </li>
       </ul>
    </div>
    <script>
       const v=new Vue({
         data(){
            return{
                k:'',
                list:[
                    {
                        name:'张三',
                        age:20
                    },
                    {
                        name:'李四',
                        age:1
                    },
                    {
                        name:'王三',
                        age:77
                    },
                    {
                        name:'王五',
                        age:54
                    },
                    {
                        name:'李三',
                        age:77
                    }
                ],
                fillist:[]
            }
         },
         //监听属性来写
        //  computed:{
        //     fillist:{
        //         get(){
        //             //这里的p其实就是每个数据,返回值就是过滤掉剩下的,filter返回的是一个新数组,不改变原数组
        //             return this.list.filter((p)=>{
        //                 return p.name.indexOf(this.k)!==-1
        //             })
        //         }
        //     }
        //  },
         //watch监听来写
         watch:{
            k:{
            immediate:true,
            handler(newValue){
              this.fillist=this.list.filter((p)=>{
                return p.name.indexOf(newValue) !== -1//符合条件的就留下
              })
            }
        }
         }
       })
       v.$mount('#root')
    </script>
</body>
</html>

四、列表排序

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <script type="text/javascript" src="../js/vue.js"></script>
</head>

<body>
    <div id="root">
        <h1>{{name}}</h1>
        <ul>
            <li v-for="(i,index) in list" :key="index">{{i}}</li>
        </ul>
        <button @click="add1">原顺序</button>
        <button @click="add2">年龄升序</button>
        <button @click="add3">年龄降序</button>
    </div>
    <script>
        const x = new Vue({
            data(){
                return{
                 name: 1,
                 chu:[1,19,2,100,23,234,12],
                 arr:[1,19,2,100,23,234,12]
                }
            },
            methods: {
             add1(){
                this.name=1;
             },
             add2(){
                this.name=2
             },
             add3(){
                this.name=3
             }
            },
            computed:{
                list:{
                    get(){
                       if(this.name==1){
                         return this.chu;
                       }
                       else if(this.name==2){
                        const gai=this.arr.sort((p1,p2)=>{
                               return p1-p2;
                         })
                         return gai
                       }
                       else{
                        const gai=this.arr.sort((p1,p2)=>{
                            return p2-p1
                        })
                        return gai
                       }
                    }
                }
            }
        })
        x.$mount('#root')
    </script>
</body>

</html>

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

菜到极致就是渣

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值