vue.js计算机属性01

简介: vue.js计算机属性01
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <script src="js/vue.js"></script>
</head>
<body>
    <div id="app">
        <p>用插值表达式计算总价:¥{{shop[0].price*shop[0].count + shop[1].price*shop[1].count + shop[2].price*shop[2].count }}</p>
        <!-- 调用计算属性totalprice,调用时不能加括号 -->
        <p>第一次用计算属性计算商品总价:¥{{totalprice}}</p>
        <!-- 第二次调用的时候,由于计算属性所依赖的商品数据没有发生改变,所以第二次调用计算属性的时候,Vue会直接从计算属性的缓存中取出上一次的调用计算属性时的计算结果,而不会重复执行计算属性的代码 -->
        <p>第二次用计算属性计算商品总价:¥{{totalprice}}</p>
        <!-- 方法是没有缓存的,所以调用了多少次,就会重复多少次方法执行方式 -->
        <p>第一次用方法total计算商品总价:¥{{ total() }}</p>
        <p>第二次用方法total计算商品总价:¥{{ total() }}</p>
        <!-- 当修改totalprice和total所依赖的数据后,totalprice最多只执行一次,而total会执行多次 -->
        <p>修改计算属性和方法所依赖的商品数据:<input type="number" v-model= "shop[1].count"></p>
        <p>修改计算属性和方法不依赖的数据title:<input type="text" v-model = "title"></p>
    </div>
    <script>
        let vm = new Vue({
            el:'#app',
            data:{
                title:'购物车',
                shop:[
                    {
                        name:'OPPO R15',
                        price:2999,
                        count:3
                    },
                    {
                        name:'华为P20',
                        price:2699,
                        count:2
                    },
                    {
                        name:'苹果13',
                        price:1999,
                        count:4
                    }
                ]
            },
            computed:{
                // 定义第一具体的totalprice计算机属性
                // 计算机属性就是一个函数
                totalprice:function(){
                    console.log('计算属性totalprice被调用了一次')
                    let sum = 0 //总价
                    for(let i=0; i<this.shop.length;i++){
                        sum = sum + this.shop[i].price * this.shop[i].count
                    }
                    // 计算属性最后必须把计算结果return返回
                    return sum
                }
            },
            methods:{
                total:function(){
                    console.log('方法total被调用了一次')
                    let sum = 0 //总价
                    for(let i=0; i<this.shop.length;i++){
                        sum = sum + this.shop[i].price * this.shop[i].count
                    }
                return sum
                }
            }
        })
    </script>
</body>
</html>
相关文章
|
1月前
|
JavaScript 前端开发 程序员
前端原生Js批量修改页面元素属性的2个方法
原生 Js 的 getElementsByClassName 和 querySelectorAll 都能获取批量的页面元素,但是它们之间有些细微的差别,稍不注意,就很容易弄错!
|
1月前
|
监控 JavaScript 前端开发
确定使用 `defer` 属性还是 `async` 属性来异步加载 JavaScript
【10月更文挑战第24天】选择使用 `defer` 属性还是 `async` 属性来异步加载 JavaScript 是一个需要综合考虑多个因素的决策。需要根据脚本之间的依赖关系、页面加载性能要求、脚本的功能和重要性等因素来进行权衡。在实际应用中,需要通过测试和验证来确定最适合的加载方式,以提供更好的用户体验和页面性能。
|
1月前
|
存储 缓存 JavaScript
如何在大型 Vue 应用中有效地管理计算属性和侦听器
在大型 Vue 应用中,合理管理计算属性和侦听器是优化性能和维护性的关键。本文介绍了如何通过模块化、状态管理和避免冗余计算等方法,有效提升应用的响应性和可维护性。
|
1月前
|
监控 JavaScript 前端开发
使用 `defer` 属性异步加载 JavaScript
【10月更文挑战第24天】使用 `defer` 属性异步加载 JavaScript 是一种有效的提高页面性能和用户体验的方法。通过合理设置 `defer` 属性,可以在不影响页面渲染的情况下异步加载脚本,并确保脚本的执行顺序。在实际应用中,需要根据具体情况选择合适的加载方式,并注意处理可能出现的问题,以确保页面能够正常加载和执行。
|
2月前
|
监控 JavaScript 开发者
在 Vue 中,子组件为何不可以修改父组件传递的 Prop,如果修改了,Vue 是如何监控到属性的修改并给出警告的
在 Vue 中,子组件不能直接修改父组件传递的 Prop,以确保数据流的单向性和可预测性。如果子组件尝试修改 Prop,Vue 会通过响应式系统检测到这一变化,并在控制台发出警告,提示开发者避免这种操作。
|
2月前
|
移动开发 JavaScript 前端开发
原生js如何获取dom元素的自定义属性
原生js如何获取dom元素的自定义属性
80 4
|
2月前
|
JavaScript 前端开发 开发者
VUE学习一:初识VUE、指令、动态绑定、计算属性
这篇文章主要介绍了Vue.js的基础知识,包括初识Vue、指令如v-for、v-on的使用、动态属性绑定(v-bind)、计算属性等概念与实践示例。
65 1
|
2月前
|
缓存 JavaScript Serverless
vue中computed计算属性、watch侦听器、methods方法的区别以及用法
vue中computed计算属性、watch侦听器、methods方法的区别以及用法
133 0
|
2月前
|
存储 JavaScript 前端开发
js中map属性
js中map属性
23 0
|
2月前
|
缓存 JavaScript 前端开发
深入理解Vue.js中的计算属性与侦听属性
【10月更文挑战第5天】深入理解Vue.js中的计算属性与侦听属性
34 0