程序员程序员开发程序员技术栈

vue学习笔记系列(四):Vue中的样式绑定

2019-01-03  本文已影响6人  i高安

今天上午去上了大学生涯中最后一堂课,又开了一下午的会,基本今天没学到什么东西,简单记录一下吧。


模板语法

v-text与{{差值表达式}}的功能一样,v-html可以直接输出html页面

<!--插值表达式-->
<!--<div id="app">-->
    <!--{{name}}-->
<!--</div>-->

<!-- v-text  v-html   -->

<!--   v-text与{{差值表达式}}的功能一样  -->
<div id="app">
    <div>{{name}}</div>
    <div v-text="name"></div>
    <div v-html="name"></div>
</div>

<script>
    var vm = new Vue({
        el:"#app",
        data:{
            name:"<h1>Test</h1>"
        }
    })
</script>

计算属性,方法,侦听器

有三种方法可以绑定属性,computed:

//计算属性,具有缓存,如果依赖的值没有发生改变则不会再计算
        computed:{
            fullName:function () {
                console.log("计算了一次");
                return this.firstName + " " + this.lastName
            }
        }

watch:

//侦听器
        watch:{
            firstName: function () {
                console.log("计算了一次");
                this.fullName = this.firstName + " " + this.lastName;
            },
            lastName: function () {
                console.log("计算了一次");
                this.fullName = this.firstName + " " + this.lastName;
            }
        }

方法,methods:

//方法 计算的效率没有计算属性的效率高
        methods:{
            fullName:function () {
                return this.firstName + " " + this.lastName
            }
        }

demo代码块:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>计算属性,方法,侦听器</title>
    <script src="https://cdn.bootcss.com/vue/2.5.21/vue.min.js"></script>
</head>
<body>
<!--用插值表达式  可以直接调用方法里面定义的函数-->
 <!--<div id="app">-->
     <!--{{fullName}}-->
     <!--{{age}}-->
 <!--</div>-->

<!--demo-->
<div id="app">
    <p>Original message:"{{ message }}"</p>
    <p>Computed reversed message:"{{ reversedMessage }}"</p>
</div>
<script>
    var vm = new Vue({
        el:"#app",
        data:{
            firstName:"Dell",
            lastName: "Lee",
            fullName:"Dell Lee",
            age:28,
            message:'Hello World!'
        },

        //这三种方法,computed的效率最高

        //侦听器
        // watch:{
        //     firstName: function () {
        //         console.log("计算了一次");
        //         this.fullName = this.firstName + " " + this.lastName;
        //     },
        //     lastName: function () {
        //         console.log("计算了一次");
        //         this.fullName = this.firstName + " " + this.lastName;
        //     }
        // }

        //方法 计算的效率没有计算属性的效率高
        // methods:{
        //     fullName:function () {
        //         return this.firstName + " " + this.lastName
        //     }
        // }

        //计算属性,具有缓存,如果依赖的值没有发生改变则不会再计算
        // computed:{
        //     fullName:function () {
        //         console.log("计算了一次");
        //         return this.firstName + " " + this.lastName
        //     }
        // }


        //demo
        computed: {
            reversedMessage:function () {
                //this 指向 vm 实例
                //split()方法用于把一个字符串分割成字符串数组
                return this.message.split('').reverse().join('')
            }
        }
    })

计算属性的setter和getter

    <div id="app">{{fullName}}</div>

<script>
    var vm = new Vue({
        el: "#app",
        data:{
            firstName: "Dell",
            lastName: "Lee"
        },
        //当依赖的值发生变化时,computed会发生改变
        computed:{
            fullName: {
                get:function () {
                    return this.firstName + " " + this.lastName
                },
                set:function (value) {
                    var arr = value.split(" ");
                    this.firstName = arr[0];
                    this.lastName  = arr[1];
                }
            }
        }
    })
</script>

样式绑定

需求:
点击页面上的字符串,点一下变成红色,再点一下回到原来的颜色,如此反复。

1.监听class,点击之后更改状态,显示绑定的style

<!--activated显示与否取决于后面的变量为true还是false-->
    <div id="app">
        <div @click="handleDivClick" :class="{activated:isActivated}">
            Hello world!
        </div>
    </div>

var vm = new Vue({
        el:"#app",
        data:{
            isActivated:false
        },
        methods:{
            handleDivClick:function () {
                this.isActivated = !this.isActivated
            }
        }
    })

2.给class绑定数组,可以绑定多个数组

<!--class绑定数组  可以绑定多个数组-->
    <div id="app">
        <div @click="handleDivClick" :class="[activated, activatedOne]">
            Hello world!
        </div>
    </div>

var vm = new Vue({
        el:"#app",
        data:{
            // styleObj:{
            //     color:"black"
            // }
            activated:"",
            activatedOne:"activated_one"
        },
        // methods:{
        //     handleDiveClick:function () {
        //         this.styleObj.color = this.styleObj.color === "black" ? "red" : "black"
        //     }
        // }
        methods:{
            handleDivClick:function () {
                //三元运算符,减少代码冗余  如果this.activated === activated 那么置空
                //否则置为activated
                this.activated = this.activated === "activated" ? "" : "activated"
            }
        }
    })

3.直接绑定样式,定义点击函数

<div id="app">
    <div :style="[styleObj,{fontSize:'20px'}]" @click="handleDiveClick">
        Hello world!
    </div>
</div>

var vm = new Vue({
        el:"#app",
        data:{
            styleObj:{
                color:"black"
            }
            // activated:"",
            // activatedOne:"activated_one"
        },
        methods:{
            handleDiveClick:function () {
                this.styleObj.color = this.styleObj.color === "black" ? "red" : "black"
            }
        }
        // methods:{
        //     handleDivClick:function () {
        //         //三元运算符,减少代码冗余  如果this.activated === activated 那么置空
        //         //否则置为activated
        //         this.activated = this.activated === "activated" ? "" : "activated"
        //     }
        // }
    })

在使用三元运算符的时候一脸懵,后来想了半天才想起来....惭愧...惭愧...

上一篇下一篇

猜你喜欢

热点阅读