Vue绑定样式&计算属性&侦听器&过滤器

1.:class绑定样式
:class绑定样式时,对象的属性名是类选择器名称,属性值返回true,表示添加该选择器
例:当点击一个按钮时,把文字背景变换颜色

 <button @click="bgColor=true">添加背景颜色</button>
 <button @click="fontColor=true">添加文本颜色</button>

使用属性值绑定样式

<div :class="{bgColor:bgColor,fontColor:fontColor}">好好学习Vue</div>

使用表达式绑定样式

 <div :class="[bgColor?'bgColor':'',fontColor?'fontColor':'',]">好好学习Vue</div>

data中的数据

 data:{
                bgColor:false,
                fontColor:false,           
            }

:style绑定样式
:style绑定样式时,对象的属性名称是css样式的名称(要使用小驼峰命名法),属性值是具体的样式值

 <div class="box1" :style="{backgroundColor:bgc,color:fc}">好好学习

2.计算属性:computed
computed属性是基于响应式依赖进行缓存,只在相关响应式依赖发生改变时它们才会重新求值。在面对复杂逻辑时,应当用计算属性。computed属性也有侦听的能力

  <div id="app">
        {computedMessage}}
        {computedMessage}}
        {computedMessage}}
        <hr>
        {{methodsMessage()}}
        {{methodsMessage()}}
        {{methodsMessage()}}
        <button type="button">查看执行几次</button>
    </div>
    <script src="../js/vue.js"></script>
    <script>

        let computedCount = 0;
        let methodsCount = 0;
        let app = new Vue({
            el: "#app",
            data: {
                num1: 100,
                num2: 100,
            },
            computed: {
                computedMessage() {
                    computedCount++;
                    return this.num1 + this.num2;
                }

            },
            methods: {
                methodsMessage() {
                    methodsCount++;
                    return this.num1 + this.num2;
                }
            }
        })

        document.querySelector("button").addEventListener("click", () => {
            console.log(`computed调用${computedCount}次`);
            console.log(`methods调用${methodsCount}次`);
        })

    </script>

执行结果:


每一个计算属性都包含一个get与一个set,computed属性默认只有get,不过在需要时可以自己提供一个set函数,当手动修改计算属性的值时,就会触发set函数,执行自定义的操作。

<div id="app">
        <p>姓:<input type="text" v-model="firstName"></p>
        <p>名:<input type="text" v-model="lastName"></p>
        <p>计算属性返回姓名:<input type="text" :value="fullName"></p>
    </div>
<script src="[https://cdn.bootcdn.net/ajax/libs/vue/2.6.14/vue.js](https://cdn.bootcdn.net/ajax/libs/vue/2.6.14/vue.js)"></script>
<script>
        new Vue({
            el: '#app',
            data: {
                firstName: '',
                lastName: '',
            },
             computed: {
                    fullName:{
                    get(){
                        return this.firstName+'.'+this.lastName
                   },
                    set(val){
                        let arr = val.split('.')
                        this.firstName = arr[0]
                        this.lastName = arr[1]
                    }
                } 
             }
        })
    </script>

3.侦听器:watch
watch ()提供了一个更通用的方法,来响应数据的变化。当需要在数据变化时执行异步或开销较大的操作时,这个方式是最有效的。

 watch:{
                //根据属性的名称,定义一个方法,用于侦听该属性的变化
                //这个方法,可以传两个参数,第一个参数是最新值,第二个参数是旧值
                name(nval,oval){
                    console.log(nval,oval);
                },
                // 侦听对象,需要开启深度监视
                student:{
                    //开启深度监视
                    deep:true,
                    //页面加载完成时,先运行一次(注意:这种情况下,旧值是undefined)
                    immediate:true,
                    //定义监视的函数
                    handler(nval,oval){
                        // 开启深度监视后,旧值已经没有意义,因为对象是引用类型,
                        // 对象的属性值已经改了,就没有旧的属性值。
                        console.log(nval,oval);
                    }
                }
            }

computed与watch的区别
(1):computed是同步的,watch可以实现异步
(2):computed中的函数都是带返回值的,wacth里面的函数可以不写返回值。
4.过滤器:filters
使用方法

 <p>商品价格(人民币):{{goods.price | toFixed2 | toRMB}}
filters:{
                // 过滤在模板中通过管道符 | 的方式来调用 
                toFixed2(val){
                    return val.toFixed(2)
                },
                //返回人民币数据
                toRMB(val){
                    return '¥'+ val
                },
            }

全局过滤器和局部过滤器重名时,会采用局部过滤器

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容