首页 > 其他分享 >vue之计算属性与监听属性

vue之计算属性与监听属性

时间:2024-04-28 20:33:23浏览次数:26  
标签:vue Vue 计算 var fullName 监听 属性

一、计算属性

1、什么是计算属性--computed

计算属性是Vue中的⼀种特殊属性,⽤于对已有的数据进⾏计算和衍⽣,以⽣
成新的数据。计算属性的值是根据依赖的数据动态计算得出的,当依赖的数据
发⽣变化时,计算属性会⾃动重新计算。

2、计算属性的作用

计算属性的主要作⽤是对数据进⾏处理和转换,以便在模板中进⾏展示或其他逻辑
操作。相⽐于在模板中直接使⽤⽅法来处理数据,计算属性具有以下优势:

缓存结果: 计算属性的值会被缓存起来,只有在依赖的数据发⽣变化时才会重
新计算。这样可以避免不必要的重复计算,提⾼性能。
响应式更新: 计算属性会⾃动追踪依赖的数据,当依赖的数据发⽣变化时,计
算属性会⾃动重新计算,保持数据的实时性。
简化模板逻辑: 通过使⽤计算属性,可以将复杂的逻辑处理和转换操作放在计
算属性中,简化模板中的代码,使模板更加清晰和易读

3、计算属性的定义方式

· 基础定义方式

computed: {
 // 计算属性的名称
 propertyName: function() {
 // 计算属性的逻辑处理
 // 返回计算结果
 return result;
 }
}

· 默认只有getter计算属性

<div id="app">
 <input type="text" v-model="firstName"> +
 <input type="text" v-model="lastName"> =
 <span>{{fullName}}</span>
</div>
<script>
 // 创建 Vue 实例,得到 ViewModel
 var vm = new Vue({
 el: '#app',
 data: {
 firstName: 'jack',
 lastName: 'chen'
 },
 methods: {},
 computed: { // 计算属性; 特点:当计算属性中所以来的任何⼀个 data 属性改变之
后,都会重新触发 本计算属性 的重新计算,从⽽更新 fullName 的值
 fullName() {
 return this.firstName + ' - ' + this.lastName;
 }
 }
 });
</script>

  • 定义有getter和setter的计算属性

<div id="app">
 <input type="text" v-model="firstName">
 <input type="text" v-model="lastName">
 <!-- 点击按钮重新为 计算属性 fullName 赋值 -->
 <input type="button" value="修改fullName" @click="changeName">
 <span>{{fullName}}</span>
</div>
<script>
 // 创建 Vue 实例,得到 ViewModel
 var vm = new Vue({
 el: '#app',
 data: {
 firstName: 'jack',
 lastName: 'chen'
 },
 methods: {
 changeName() {
 this.fullName = 'TOM - chen2';
 }
 },
 computed: {
 fullName: {
 get: function () {
 return this.firstName + ' - ' + this.lastName;
 },
 set: function (newVal) {
 var parts = newVal.split(' - ');
 this.firstName = parts[0];
 this.lastName = parts[1];
 }
 }
 }
 });
</script>

4、通过计算属性实现名字首字母大写

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script src="./vue/vue.js"></script>
</head>
<body>
<div id="app">

    <input type="text" v-model="name">--》》{{newName}}
    <hr>
    <input type="text" v-model="name1">---》{{name1}}
</div>
</body>
<script>
    var vm = new Vue({
        el: '#app',
        data: {
            name: '',
            name1: ''
        },
        methods: {
            // 普通函数形式
            handleToUpper() {
                console.log('函数我执行了')
                return this.name.substring(0, 1).toUpperCase() + this.name.substring(1)
            }
        },
        computed:{
            newName(){
                console.log('计算属性我执行了')
                return this.name.substring(0, 1).toUpperCase() + this.name.substring(1)
            }
        }
    })
</script>
</html>

5、计算属性写过滤案例

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script src="./vue/vue.js"></script>
</head>
<body>
<div id="app">
    <h1>过滤案例</h1>
    <input type="text" v-model="myText">
    <hr>
    <ul>
        <li v-for="item in newdataList">{{item}}</li>
    </ul>
</div>
</body>
<script>
    var vm = new Vue({
        el: '#app',
        data: {
            myText: '',
            dataList: ['a', 'at', 'atom', 'be', 'beyond', 'cs', 'csrf', 'atome', 'atomem'],

        },
        computed:{
            newdataList(){
                return this.dataList.filter(item=> item.indexOf(this.myText) >= 0)
            }
        }
    })

</script>
</html>

二、监听属性

1、什么是监听属性---watch

监听属性是Vue中的⼀种特殊属性,⽤于监测数据的变化并触发相应的回调函
数。通过监听属性,我们可以在数据发⽣改变时执⾏⼀些额外的逻辑操作。

2、监听属性的作用

监听属性的作⽤是在数据发⽣变化时,执⾏⼀些副作⽤操作或触发其他的逻辑。它可以⽤于响应数据的变化并进⾏相应的处理,⽐如数据的验证、异步操作、触发其他组件的更新等。

3、监听属性的定义方式

在watch对象中,可以定义多个属性的监听器,每个属性对应⼀个回调函数。当被监听的属性发⽣变化时,Vue会⾃动调⽤对应的回调函数,并传递新值和旧值作为参数。
  • 基础定义⽅式

 // 被监听的属性名
 propertyName: function(newVal, oldVal) {
 // 在属性变化时执⾏的逻辑操作
 }
}
  • 监听data中属性的改变

<div id="app">
 <input type="text" v-model="firstName"> +
 <input type="text" v-model="lastName"> =
 <span>{{fullName}}</span>
</div>
<script>
// 创建 Vue 实例,得到 ViewModel
 var vm = new Vue({
 el: '#app',
 data: {
 firstName: 'jack',
 lastName: 'chen',
 fullName: 'jack - chen'
 },
 methods: {},
 watch: {
 'firstName': function (newVal, oldVal) { // 第⼀个参数是新数据,第⼆个参
数是旧数据
 this.fullName = newVal + ' - ' + this.lastName;
 },
 'lastName': function (newVal, oldVal) {
 this.fullName = this.firstName + ' - ' + newVal;
 }
 }
 });
</script>
  • 监听路由对象的改变

<div id="app">
 <router-link to="/login">登录</router-link>
 <router-link to="/register">注册</router-link>
 <router-view></router-view>
</div>
<script>
 var login = Vue.extend({
 template: '<h1>登录组件</h1>'
 });
 var register = Vue.extend({
 template: '<h1>注册组件</h1>'
 });
 var router = new VueRouter({
 routes: [
 { path: "/login", component: login },
 { path: "/register", component: register }
 ]
 });
 // 创建 Vue 实例,得到 ViewModel
 var vm = new Vue({
 el: '#app',
 data: {},
 methods: {},
 router: router,
 watch: {
 '$route': function (newVal, oldVal) {
 if (newVal.path === '/login') {
 console.log('这是登录组件');
 }
 }
 }
 });
</script>

三、计算属性和监听属性的区别

computed属性的结果会被缓存,除⾮依赖的响应式属性变化才会重新计算。主要当作属性来使⽤,使⽤的时候不加();

methods⽅法表示⼀个具体的操作,主要书写业务逻辑;

watch⼀个对象,键是需要观察的表达式,值是对应回调函数。主要⽤来监听某些特定数据的变化,从⽽进⾏某些具体的业务逻辑操作;可以看作是computed和methods的结合体

总结来说,计算属性⽤于对已有的数据进⾏处理和转换,⽣成新的数据;⽽监听属性⽤于监测数据的变化并执⾏相应的副作⽤操作。它们在Vue开发中都有各⾃的应⽤场景,根据实际需求选择使⽤。
      

标签:vue,Vue,计算,var,fullName,监听,属性
From: https://www.cnblogs.com/queryH/p/18164435

相关文章

  • SAP MM 定义物料类型的属性配置里的New entries按钮
    SAPMM定义物料类型的属性配置里的Newentries按钮  在SAP的很多后台配置界面上都有NewEntries(新条目)按钮,方便企业用户可以根据企业特有业务需求来增加新的配置条目。 事实上,并不是所有的配置界面里,都能很随意很方便的允许企业用户点击’NewEntries’按钮来做定制配......
  • 为什么打印对象,点开查看某属性有值,但是直接打印无值
    1.现象某些刚学习一段时间前端,或者学习一段时间后的一些人不知道为什么打印对象,点开查看某属性有值,但是直接打印无值.比较常见的一个开发现象就是发现自己直接打印对象有值,但是进行页面跳转或者其他业务请求之类的时候发现参数拿不到2.原因直接打开控制台的时候里面没......
  • 为什么vue打印的对象在浏览器中显示...
    1.现象当在vue中打印对象的时候会发现有一些属性或者全部属性都是显示的...,点击展开后才能看到真正的值是什么.2.原因因为在vue中对象都是用了代理重写了get,由于get重写也就导致了浏览器不能直接获取到具体的值,因此才会在打印的时候为...,手动点击展开才显示具体的值......
  • 组件的使用、父子通信、ref属性(父子通信)、动态组件、 keep-alive、插槽
    【组件的使用】1<!DOCTYPEhtml>2<htmllang="en">3<head>4<metacharset="UTF-8">5<title>Title</title>6<scriptsrc="https://cdn.jsdelivr.net/npm/vue/dist/vue.js">&......
  • vue3 引入workers 大量优化业务代码和复杂的计算的代码
    前沿vite页面引入worker在src新建一个 worker.d.ts文件declaremodule'*.worker.ts'{classWebpackWorkerextendsWorker{constructor();}exportdefaultWebpackWorker;}在 tsconfig.json页面引入"lib":["esnext",......
  • 『手撕Vue-CLI』添加自定义指令
    前言经上篇『手撕Vue-CLI』添加帮助和版本号的介绍之后,已经可以在控制台中输入nue--help来查看帮助信息了,但是在帮助信息中只有--version,--help这两个指令,而vue-cli中还有很多指令,例如create,serve,build等等,所以本章将继续添加自定义指令,例如create指令。添加create......
  • Azure Storage (30) 基于属性的访问控制(ABAC)
    《WindowsAzurePlatform系列文章目录》 我们在使用AzureStorage的时候,经常会基于属性来进行访问控制,我们假设一个场景1:(1)用户:productionuser01可以访问到container以production开头的文件内容,如contoso.blob.core.windows.net/production01contoso.blob.c......
  • Vue系列---【如何关闭eslint校验?】
    如何关闭eslint校验?1.如果你的项目集成了eslint,但校验太严格,导致项目启动不了,你没时间排错,你可以找到vue.config.js,没有就创建,配上下面的内容。module.exports={//关闭eslint,因为校验太严格,例如:在main.js里定义了一个变量leta=100;,但未使用,就会导致项目启动不了......
  • 响应式原理(Vue3、Vue2)
    1.Vue3副作用函数(onMounted、watchEffect)帮助管理组件中的副作用逻辑,并自动追踪其依赖关系,以确保在数据变化时能够自动触发副作用函数的更新。会自动追踪被其内部函数引用的响应式数据。当这些数据发生变化时,Vue3会自动重新运行副作用函数,确保副作用与数据的状态保持同步。......
  • ant design pro vue项目搭建-运行项目
    1、克隆代码gitclone--depth=1https://github.com/vueComponent/ant-design-vue-pro.git2、依赖安装npminstall提示eslint版本报错  去除eslint,将package.json中eslint相关配置删除3、重新安装依赖完成,没有报错 npminstall 4、启动项目 npmrun......