85.【Vue-细刷-01】(八)

简介: 85.【Vue-细刷-01】

(十)、姓名案列_分析_计算属性

1.插值语法进行实现

<!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="root">
        姓:<input type="text" v-model:value="xing">
        <br><br>
        名:<input type="text" v-model:value="ming">
        <br><br>
        全名:<span>{{xing}}-{{ming}}</span>
    </div>
    <script type="text/javascript">
        var vm = new Vue({
            el: '#root',
            data: {
                xing:'李',
                ming:'明'
            }
        });
    </script>
</body>
</html>

2.methods方法实现

  • methods 里面的方法只要在绑定的容器里就可以直接利用{{}}调用
  • 这里的this指的是vm的实列。
  • 这里面的小括号我们必须要加,如果不加就会去找data区域不会找methods区域
<!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>使用methods进行实现</title>
    <script src="../js/vue.js"></script>
</head>
<body>
    <div id="root">
        姓:<input type="text" v-model:value="xing">
        <br><br>
        名:<input type="text" v-model:value="ming">
        <br><br>
        全名:<span>{{fullName()}}</span>
    </div>
    <script type="text/javascript">
        var vm = new Vue({
            el: '#root',
            data: {
                xing:'李',
                dia:'-',
                ming:'川'
            },
            methods: {
                fullName(){
                    return this.xing + this.dia+this.ming;
                }
            }
        });
    </script>
</body>
</html>

⭐3.JS原生代码进行实现⭐

  • 利用添加属性的操作 Object.defineProperty()
  • 当我们调用fulltime属性的时候,就获取 first+name
  • 当我们改变fulltime的时候,我们获取到更改后的值。并且对值进行截取两部分。根据(-)
  • 字符串.split(’ ')截取数据
<!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>
</head>
<body>
    <script type="text/javascript">
        let p = {
            firstName: '张',
            lastName: '三'
            // fullName= this.firstName + ' ' + this.lastName  不能这样写 因为这样写的话我们的this指的是window并不是p
        };
        Object.defineProperty(p,'fullName',{
            set(value) {   //当p被改变的时候,会自动调用set的值
                var arr =value.split('-');
                this.firstName=arr[0];
                this.lastName=arr[1];
        }, 
            get() {  //当p被调用的时候,会自动调用get的值
                return this.firstName + '-' + this.lastName;
            }
    });
    </script>
</body>
</html>

4.computed计算属性实现 (简写 只读)

什么时候调用计算属性 fullName?

  • ⭐初次渲染会调用
  • ⭐当依赖的属性值发生变化(本程序中依赖的属性是xing ming 和 fullName)
  • ⭐当自己的属性被调用的时候
  • 本质上是属性,不是方法。嗲用的时候不能加小括号
    为什么不能用简写的方法改全名?
  • 因为计算属性中 ,内涵了一个get()方法。没有包含set()方法
  • computed 的底层用的还是 get 和 set
    计算属性的本质是:
  • 添加属性并且赋值
1.计算属性: 要显示的数据不存在.要通过计算得来
2.fullName函数底层用到得是对象setter() 和 getter()方法
 3.执行得时机:
        (1).初始显示会执行一次,得到的初始值去显示
        (2).当以来得数据发生改变时会被再次调用
 4.优势: 与methods实现相比,内部缓存机制 效率更高。   
<!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="root">
        姓:<input type="text" v-model:value="xing">
        <br><br>
        名:<input type="text" v-model:value="ming">
        <br><br>
        全名:<input type="text" v-model:value="fullName">
    </div>
    <script type="text/javascript">
        new Vue({
            el: '#root',
            data:{
                xing:'李',
                ming:'明'
            },
            computed:{   // 计算属性,重要的是属性。也就是说在这个区域中的方法也就是属性,换句话说就是添加属性
                //  * ! computed 的底层用的还是 get 和 set 
                // * !fullName什么时候调用?  (简写)
                // * ?⭐初次渲染会调用。⭐当依赖的属性值发生变化(本程序中依赖的属性是xing ming 和 fullName)
                fullName(){   
                    return this.xing + '-' + this.ming
                }
        });
    </script>
</body>
</html>

5.computed计算属性实现 (完整 读写)

  • 这里我们对添加的属性进行手动添加get 和 set方法

<!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="root">
        姓:<input type="text" v-model:value="xing">
        <br><br>
        名:<input type="text" v-model:value="ming">
        <br><br>
        全名:<input type="text" v-model:value="fullName">
    </div>
    <script type="text/javascript">
        new Vue({
            el: '#root',
            data:{
                xing:'李',
                ming:'明'
            },
            computed:{ 
            //     完整写法
            fullName:{
                set(Value){  //当fullName被修改的时候,会调用这个方法
                    var arr=Value.split('-');
                    this.xing=arr[0];
                    this.ming=arr[1];
                },
                get(){
                    return this.xing + '-' +this.ming;
                }
            }
            }
        });
    </script>
</body>
</html>

⭐6.插值语法里面的参数⭐

1.假如说插值语法里面的参数没有小括号

(1).可能时data储存区里的

(2).也可能时computed储存区里的

2.假如说插值语法里面的参数有小括号

(1).一定时methods方法区域里面的

(十一)、data methods computed总结

1.基本简要

  • 方法和计算属性直接归vm所有 不用代理
  • 全场的this都是vue的实列
  • 方法名不能和属性名相一致,否则会冲突
  • 计算属性会在初始化渲染的时候进行调用一次(前提是用到)
  • 计算属性优点是: 具有缓存的操作
  • 在data中 里面的this是指window
<!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="root">
        <h2>{{x}}</h2>
        <br>
        <h2>{{y()}}</h2>
        <br>
        <h2>{{z}}</h2>
        <br>
        <button @click="y">点我调用y方法</button>
        <br><br>
        展示x的值是:<input type="text" :value="x">
    </div>
    <script type="text/javascript">
        var vm = new Vue({
            el: '#root',  //绑定哪个容器 为那个容器服务
            data: {  //驱动页面显示的数据都放在这里
                x: 'Hello, World!'   // 最终会通过数据代理的方法放入 vm
            },
            methods: {   // 方法名和属性名不能一致,否则会造成冲突
                y(){  //这里没有利用数据代理。直接被放在vm身上。
                    console.log(100+'被调用');
                    return 100;
                }
                },
            computed:{
                z:{  //z直接被放在vm身上了
                    set(value){  //z的值被改变时mset执行,set中的this是vm,set会修改改变的值
                            console.log('有人修改了z值,修改的值是:',value);
                    },
                    get(){  //z的值被读取的时候或z依赖的值,get执行。
                        return 300;
                    }
                }
            }    
        });
    </script>
</body>
</html>

相关文章
|
3天前
|
JavaScript
vue使用iconfont图标
vue使用iconfont图标
34 1
|
14天前
|
JavaScript 关系型数据库 MySQL
基于VUE的校园二手交易平台系统设计与实现毕业设计论文模板
基于Vue的校园二手交易平台是一款专为校园用户设计的在线交易系统,提供简洁高效、安全可靠的二手商品买卖环境。平台利用Vue框架的响应式数据绑定和组件化特性,实现用户友好的界面,方便商品浏览、发布与管理。该系统采用Node.js、MySQL及B/S架构,确保稳定性和多功能模块设计,涵盖管理员和用户功能模块,促进物品循环使用,降低开销,提升环保意识,助力绿色校园文化建设。
|
2月前
|
JavaScript 前端开发 开发者
vue学习第一章
欢迎来到我的博客!我是瑞雨溪,一名热爱前端的大一学生,专注于JavaScript与Vue,正向全栈进发。博客分享Vue学习心得、命令式与声明式编程对比、列表展示及计数器案例等。关注我,持续更新中!🎉🎉🎉
44 1
vue学习第一章
|
2月前
|
JavaScript 前端开发 索引
vue学习第三章
欢迎来到瑞雨溪的博客,一名热爱JavaScript与Vue的大一学生。本文介绍了Vue中的v-bind指令,包括基本使用、动态绑定class及style等,希望能为你的前端学习之路提供帮助。持续关注,更多精彩内容即将呈现!🎉🎉🎉
32 1
|
2月前
|
缓存 JavaScript 前端开发
vue学习第四章
欢迎来到我的博客!我是瑞雨溪,一名热爱JavaScript与Vue的大一学生。本文介绍了Vue中计算属性的基本与复杂使用、setter/getter、与methods的对比及与侦听器的总结。如果你觉得有用,请关注我,将持续更新更多优质内容!🎉🎉🎉
39 1
vue学习第四章
|
2月前
|
JavaScript 前端开发 算法
vue学习第7章(循环)
欢迎来到瑞雨溪的博客,一名热爱JavaScript和Vue的大一学生。本文介绍了Vue中的v-for指令,包括遍历数组和对象、使用key以及数组的响应式方法等内容,并附有综合练习实例。关注我,将持续更新更多优质文章!🎉🎉🎉
30 1
vue学习第7章(循环)
|
2月前
|
JavaScript 前端开发
vue学习第九章(v-model)
欢迎来到我的博客,我是瑞雨溪,一名热爱JavaScript与Vue的大一学生,自学前端2年半,正向全栈进发。此篇介绍v-model在不同表单元素中的应用及修饰符的使用,希望能对你有所帮助。关注我,持续更新中!🎉🎉🎉
33 1
vue学习第九章(v-model)
|
2月前
|
JavaScript 前端开发 开发者
vue学习第十章(组件开发)
欢迎来到瑞雨溪的博客,一名热爱JavaScript与Vue的大一学生。本文深入讲解Vue组件的基本使用、全局与局部组件、父子组件通信及数据传递等内容,适合前端开发者学习参考。持续更新中,期待您的关注!🎉🎉🎉
47 1
vue学习第十章(组件开发)
|
2月前
|
JavaScript 前端开发
vue学习第十一章(组件开发2)
欢迎来到我的博客,我是瑞雨溪,一名自学前端两年半的大一学生,专注于JavaScript与Vue。本文介绍Vue中的插槽(slot)使用方法,包括基本插槽、具名插槽及作用域插槽,帮助你在组件开发中实现内容的灵活定制。如果你觉得有帮助,请关注我,持续更新中!🎉🎉🎉
24 1
vue学习第十一章(组件开发2)
|
2月前
|
监控 JavaScript 前端开发
vue学习第十二章(生命周期)
欢迎来到我的博客,我是瑞雨溪,一名热爱JavaScript和Vue的大一学生。本文深入探讨了Vue实例的生命周期,从初始化到销毁各阶段的关键钩子函数及其应用场景,帮助你更好地理解Vue的工作原理。如果你觉得有帮助,欢迎关注我,将持续分享更多优质内容!🎉🎉🎉
33 1
vue学习第十二章(生命周期)

热门文章

最新文章