Vue的style,css的样式绑定,事件处理,列表渲染

Style的样式绑定

第一种::style="{ color: activeColor, fontSize: fontSize + 'px' }"

其中activeColor/fontSize 是data 属性

第二种::style="{ color, fontSize }" 

data中赋值  color:'red',fontSize:30+'px'

CSS的样式绑定

1) class='xxx 最原始的方式

       <p class="class3" >样式绑定</p>

2) 表达式是字符串: 'classA'

       <p :class="a" >样式绑定字符串</p>

       data中赋值  a:'class1',  然后在上面定义一个名为class1的样式

3) 表达式是对象: {classA:isA, classB: isB}

        <p :class="{class1:isA,class2:isB}">样式绑定对象</p>

        data中赋值 isA:true,isB:false    class1,class2就是普通的class名,不是data中赋值定义的,在data中只需要定义isA和isB

4) 表达式是数组: ['classA', 'classB']

       <p :class="['class2','class3']">样式绑定数组</p>

       直接把在style中定义好的class,放入数组中

事件处理

     1.事件修饰符

      .stop       :停止事件冒泡

      .prevent   :阻止事件的默认行为

      .once       :只能点击一次

    2.按键修饰符

       :keyup.enter    :按回车的调用

                        <input type="text" @keyup.enter="test8"><!--调用事件test8-->

                  .tab        按tab键调用

                  .delete   按delete键调用

                  .esc         .space    .up    .down      .left     .right     .ctrl     .alt   .shift      .mete 

列表渲染

 列表渲染类型

1) 列表显示指令数组: v-for / index对象: v-for / key

2) 列表的更新显示删除item替换item

3) 列表的高级处理列表过滤列表排序

代码:列表的循环,删除,更新

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>demo3</title>
</head>
<body>
<div id="demo">
    <h2>v-for循环数组</h2>
    <ul>
        <li v-for="(p,index) in persons" :key="index">
            {{index}}--{{p.name}}---{{p.age}}
            ---<button @click="deletePerson(index)">删除</button>
            ---<button @click="updatePerson(index,{name:'小萱萱',age:24})">更新</button>
        </li>
    </ul>
    <h2>v-for循环对象</h2>
    <ul>
        <li v-for="(value,key) in persons[0]">
            {{key}}---{{value}}
        </li>
    </ul>
</div>
</body>
<script type="text/javascript" src="js/vue.js"></script>
<script type="text/javascript">
    var vm = new Vue({
        el:"#demo",
        data: {
            persons:[
                {name:"张三",age:18},
                {name:"李四",age:19},
                {name:"王五",age:20},
                {name:"小七",age:21}
            ]
        },methods: {
            deletePerson(index){
                this.persons.splice(index,1);
            },
            updatePerson(index,person){
                //这种会更新数据、不会更新页面
                //this.persons[index] = person;
                //这种会更新数据、更新页面
                this.persons.splice(index,1,person);
            }
        }
    });
</script>
</html>

代码2:列表搜索和排序

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>demo3</title>
</head>
<body>
<div id="demo">
    <h2>列表的搜索排序</h2>
    <input type="text" name="searchName" placeholder="搜索指定用户名" v-model="searchName"><br>
    <ul>
        <li v-for="(p,index) in filterPerson" :key="p.id">
            {{index}}--{{p.name}}---{{p.age}}
        </li>
    </ul>
    <button @click="setOrderType(1)">年龄升序</button>
    <button @click="setOrderType(2)">年龄降序</button>
    <button @click="setOrderType(0)">原来的顺序</button>
</div>
</body>
<script type="text/javascript" src="../js/vue.js"></script>
<script type="text/javascript">
    var vm = new Vue({
        el:"#demo",
        data: {
            orderType:0,//0表示不排序,1表示升序,2表示降序
            searchName:"",
            persons:[
                {id:1,name:"张三",age:28},
                {id:2,name:"张四",age:19},
                {id:3,name:"张五",age:19},
                {id:4,name:"小七",age:21}
            ]
        },computed:{
            filterPerson(){
                //从this中取出searchName和persons
                let {orderType,searchName,persons} = this
                //最终要显示的数组
                persons = persons.filter(p => p.name.indexOf(searchName)!=-1);
                //排序
                if(orderType!=0){
                    persons = persons.sort(function(p1,p2){
                        //升序
                        if(orderType==1){
                            return p1.age - p2.age;
                        }else{
                            //降序
                            return p2.age - p1.age;
                        }
                    });
                }
                return persons;
            }
        },methods:{
            setOrderType(orderType){
                this.orderType = orderType;
            }
        }
    });
</script>
</html>

我们看到上面的数组更新方法里的一些效果,发现直接赋值可以改变数组,但是不会更新页面,而使用数组的方法

push()

pop()

shift()

unshift()

splice()

sort()

reverse()

这些方法都会更新页面,在Vue的网站里

学习>教程>数组更新检测里这部分有说明,上面的这些方法都是变异方法,变异方法更新数组的同时,会去更新视图

//这种会更新数据、不会更新页面
//this.persons[index] = person;
//这种会更新数据、更新页面
this.persons.splice(index,1,person);
发布了62 篇原创文章 · 获赞 6 · 访问量 2575

猜你喜欢

转载自blog.csdn.net/qq_44424498/article/details/102799862