【Vue】Vue扫盲(三)计算属性和监听器

【Vue】Vue扫盲(一)事件标签、事件修饰符:@click.prevent @click.stop @click.stop.prevent、按键修饰符、及常用指令

【Vue】Vue扫盲(二)指令:v-for 、v-if、v-else-if、v-else、v-show

文章目录

1、 计算属性(computed)

某些结果是基于页面上之前的数据实时计算出来的, 我们可以利用计算属性。 来完成

示例:

html 复制代码
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>计算属性和监听器</title>
</head>
<body>
    <div id="app" style="border: 1px red; margin: auto;">
        <ul>
            <li>西游记,价格{{xyjPrive}},数量:<input type="number" v-model="xyjNum"/></li>
            <li>水浒传,价格{{shzPrice}},数量:<input type="number" v-model="shzNum"/></li>
            <li>总价{{totalPrice}}</li>

            
        </ul>

    </div>


    <script src="../node_modules/vue/dist/vue.js"></script>
    <script>

       let vm = new Vue({
            el:"#app",
            data:{
                xyjPrive:99.98,
                shzPrice:98,
                xyjNum:1,
                shzNum:1
                
            },
            methods: {
                 
            },
            computed:{
                totalPrice(){
                    return this.xyjPrive*this.xyjNum+this.shzPrice*this.shzNum;
                }
            }
        })

    </script>
</body>
</html>

结果1:

结果2:

2、监听器 watch

watch 可以让我们监控一个值的变化。 从而做出相应的反应。

示例:

html 复制代码
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>计算属性和监听器</title>
</head>
<body>
    <div id="app" style="border: 1px red; margin: auto;">
        <ul>
            <li>西游记,价格{{xyjPrive}},数量:<input type="number" v-model="xyjNum"/></li>
            <li>水浒传,价格{{shzPrice}},数量:<input type="number" v-model="shzNum"/></li>
            <li>总价{{totalPrice}}</li>
            提示信息:{{msg}}
            
        </ul>

    </div>


    <script src="../node_modules/vue/dist/vue.js"></script>
    <script>

       let vm = new Vue({
            el:"#app",
            data:{
                xyjPrive:99.98,
                shzPrice:98,
                xyjNum:1,
                shzNum:1,
                msg:""
                
            },
            methods: {
                 
            },
            computed:{
                totalPrice(){
                    return this.xyjPrive*this.xyjNum+this.shzPrice*this.shzNum;
                }
            },
            watch:{ //watch可以让我们监控一个值的变化,从而做出反应
                xyjNum:function(newVal,oldVal){ //同等写法:xyjNum(newVal,oldVal)
                    if(newVal>=3){
                        this.msg="西游记库存没有更多了";
                         this.xyjNum=3;
                    }else{
                        this.msg="";
                    }
                }
            }
        })

    </script>
</body>
</html>

效果1:
西游记的数量不能超过3,如果超过3,则无法在增加,一直是三。并给出提示库存超出

效果2:

3、过滤器(局部过滤器、全局过滤器)

过滤器不改变真正的data, 而只是改变渲染的结果, 并返回过滤后的版本。 在很多不同的

情况下, 过滤器都是有用的, 比如尽可能保持 API 响应的干净, 并在前端处理数据的格式。

示例: 展示用户列表性别显示男女

  • 下面的 genderFilter 一个局部过滤器,只能在当前的Vue监听的视图中使用
  • gFilter 是一个全局过滤器,在全局都可以用
html 复制代码
<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>过滤器</title>
</head>

<body>

    <!-- 过滤器通常用来处理文本格式化的操作,过滤器可以用在两个地方,双花括号插值和v-bind表达式 -->
    <div id="app">
        <ul>
            <li v-for="user in userList" :key="user.id">
                {{user.id}}==>{{user.name}}==>{{user.gender}}==>
                {{user.gender ==1?"男":"女"}} <!-- 简单的可以通过三目运算符来完成转换,如果复杂的则通过过滤器进行转化 -->
                ====使用局部过滤器后的结果:{{user.gender|genderFilter}}
                ====》 使用全局过滤器后的结果:{{user.gender|gFilter}}
            </li> <!-- 上面的{{user.gender|genderFilter}} 中的 | 是管道符的作用 ,是把前面user.gender的值传给了 后面的genderFliter中进行处理,
            并返回一个值-->
        </ul>

    </div>


    <script src="../node_modules/vue/dist/vue.js"></script>
    <script>
        //第一个参数:过滤器名字,第二个参数是函数体(真正的处理逻辑)
        Vue.filter("gFilter",function(val){
            if (val == 1) {
                        return "男~~~";
                    } else {
                        return "女~~~";
                    }
        })

        let vm = new Vue({
            el: "#app",
            data: {
                userList: [
                    { id: 1, name: 'jacky', gender: 1 },
                    { id: 2, name: 'peter', gender: 0 }
                ]
            },
            methods: {

            },
            filters: {
                //由于这个过滤器写在单个的Vue实例中,所以叫做局部过滤器,我们还有全局过滤器一说
                genderFilter(val) {
                    if (val == 1) {
                        return "男";
                    } else {
                        return "女";
                    }
                }
            }
        })

    </script>
</body>

</html>

结果: 1转换成了男 2 转换成了女

相关推荐
hh随便起个名4 小时前
力扣二叉树的三种遍历
javascript·数据结构·算法·leetcode
我是小路路呀5 小时前
element级联选择器:已选中一个二级节点,随后又点击了一个一级节点(仅浏览,未确认选择),此时下拉框失去焦点并关闭
javascript·vue.js·elementui
程序员爱钓鱼5 小时前
Node.js 编程实战:文件读写操作
前端·后端·node.js
PineappleCoder5 小时前
工程化必备!SVG 雪碧图的最佳实践:ID 引用 + 缓存友好,无需手动算坐标
前端·性能优化
JIngJaneIL6 小时前
基于springboot + vue古城景区管理系统(源码+数据库+文档)
java·开发语言·前端·数据库·vue.js·spring boot·后端
敲敲了个代码6 小时前
隐式类型转换:哈基米 == 猫 ? true :false
开发语言·前端·javascript·学习·面试·web
澄江静如练_6 小时前
列表渲染(v-for)
前端·javascript·vue.js
JustHappy7 小时前
「chrome extensions🛠️」我写了一个超级简单的浏览器插件Vue开发模板
前端·javascript·github
Loo国昌7 小时前
Vue 3 前端工程化:架构、核心原理与生产实践
前端·vue.js·架构