绑定class样式

核心:正常的样式正常写,变化的样式用绑定的形式去写

    <style>

        .basic{}

        .normal{}        

    </style>

    <div class="basic":class="a" @click="changeMood">{{name}}</div>

    //这里:a就是变化的样式,交给vue去保管

    new Vue({

        data:{

            a:'normal'

        }

    })

basic 和 代表a的normal组合到了一起,形成了最终的样式

:class------>v-bind:class绑定,字符串写法,适用于:样式的类名不确定,需要动态指定

不加冒号就是从外部class样式中进行寻找,加上冒号使用了vue指令,vue就会介入进行操作,并且右侧变成了一个表达式

绑定还可以用数组进行绑定,适用于要绑定的样式个数不确定,名字也不确定的情况

    <style>

        .sty1{}

        .sty2{}

        .sty3{}        

    </style>

    <div class="basic":class="arr" @click="changeMood">{{name}}</div>


    const vm = new Vue({

        data:{

            // arr:['sty1','sty2','sty3']

            // 此时数组里面放多少个样式,那么就会执行多少个样式,此时并没有任何限制

        }

    })

使用对象进行绑定,sty1对应false就是不启用sty1的样式,适用于要绑定的样式个数确定,名字也确定,但是要动态决定

    <style>

        .sty1{}

        .sty2{}

        .sty3{}        

    </style>

    <div class="basic":class="classObj" @click="changeMood">{{name}}</div>

    

    const vm = new Vue({

        data:{

            classObj:{

                sty1:false,

                sty2:false,

            }

        }

    })

绑定style样式:

这是没有交给vue管理的,要管理的部分:40px,40px需要动态指定

    <style>

        .sty1{}

        .sty2{}

        .sty3{}        

    </style>

    <div class="basic" style="font-size:40px;">{{name}}</div>

    <style>

        .sty1{}

        .sty2{}

        .sty3{}        

    </style>

    <div class="basic" :style="{fontSize:fsize+'px'}">{{name}}</div>

    

    new Vue({

        data:{

            fsize:40

        }   

    })

style对应的样式也是有键值对的,如果想要动态绑定,则需要写成对象形式

完整格式:{fontSize:fsize+'px'}

font-size发生改变,也不是fsizepx,而是fsize + 'px'

最终格式:使用对象进行绑定

    <style>

        .sty1{}

        .sty2{}

        .sty3{}        

    </style>

    <div class="basic" :style="styleObj">{{name}}</div>

    

    new Vue({

        data:{

            styleObj:{

                //前面的key不能乱写,因为原css中有font-size所以才能写成fontSize

                fontSize:'40px'

            }

        }   

    })

总结:

绑定样式:

    class样式:

        写法::class="xxx" xxx可以是字符串,对象,数组

       style样式

        写法::style="{fontSize:xxx}" 其中xxx是动态值

                    :style="[a,b]"其中a,b是样式对象


条件渲染:你符合了某些条件,就给你渲染一些东西

v-show 简洁明了,后面跟随的是布尔值,根据真假决定是否显示该元素

    <h2 v-show="a">欢迎来到{{name}}</h2>

    new Vue({

        el: "#root",

        data: {

            name: "柠"

            a:"false"

        }

    })

这里还展示出vue会去data中寻找的特性

v-if 指令:也是跟随布尔值,但和v-show不同的是,当设置为false时,在控制台连任何结构都不可见了

v-else-if 指令/v-else指令:就是分支结构,不允许打断

<template>在不破坏结构的情况下完成条件渲染,但只能和v-if配合使用

    <template v-if="n===1">

        <h2>Hello</h2>

    </template>

在浏览器中查看源码可以发现并没有外层的template

最终源码

<!DOCTYPE html>
<html>

<head>
    <meta charset="UTF-8">
    <title>你好啊!</title>
    <script type="text/javascript" src="../JS/vue.js"></script>
</head>

<body>
    <div id="root">
        <h2 v-show="false">欢迎来到{{name}}</h2>
        <h2>当前的n值是{{n}}</h2>
        <button @click="numberlogic">点我,n+1</button>
        <h2 v-show="this.n>=3">恭喜你点到了第3下</h2>
        <h2 v-show="this.n>=5">恭喜你点到了第5下</h2>
        <h2 v-show="this.n>=7">恭喜你点到了第7下</h2>
    </div>
    <script type="text/javascript">
        Vue.config.productionTip = false;
        new Vue({
            el: "#root",
            data: {
                name: "柠",
                n:0
            },
            methods:{
                numberlogic(){
                    this.n++
                }
            }
        })
    </script>
</body>

</html>

列表渲染:基础

你想生成多个谁,就往谁身上放:v-for,Vue帮你做循环

<!DOCTYPE html>
<html>

<head>
    <meta charset="UTF-8">
    <title>你好啊!</title>
    <script type="text/javascript" src="../JS/vue.js"></script>
</head>

<body>
    <div id="root">
        <ul>
            <!-- :key="p.id"表示,让每一个li都有了每一个唯一的标识 -->
             <!-- 
                这种方法也可以实现,使用遍历数组得到的索引值作为唯一标识
                <li v-for="(p,index) in personList" :key="index">
             -->
            <li v-for="p in personList" :key="p.id">
                {{p.name}}-{{p.age}}
            </li>
        </ul>

        <ul>
            <li v-for="(value,key) in car":key="key">
                {{key}}-{{value}}
                <!-- {{a}}-{{b}} -->
                <!-- 在这里a是value,b是key;与键值对表示相反 -->
            </li>
        </ul>
    </div>
    <script type="text/javascript">
        Vue.config.productionTip = false;
        new Vue({
            el: "#root",
            data: {
                // 遍历数组是最多的
                personList:[
                    { id: '001', name: '张三', age: 18 },
                    { id: '002', name: '老李', age: 19 },
                    { id: '003', name: '王五', age: 20 },
                ],
                //v-for还能够遍历对象和字符串
                car:{
                    name:"赵六",
                    age:"22",
                    clothes:"外套"
                }
            }
        })
    </script>
</body>

</html>

这个家伙很懒,什么也没留下