Vue组件的计算属性和普通属性的区别说明

yizhihongxing

Vue组件中常用的属性有两类,一类是普通属性,另一类是计算属性。两者有什么区别呢?在这里详细讲解一下。

普通属性

普通属性是指直接定义在 Vue 组件实例中的属性,它的值可以是静态的也可以是动态的。普通属性的值是可以直接访问的,一旦指定了初始值,它的值不会再发生变化,直到组件实例被销毁。

以下是一个示例代码:

<template>
  <h1>{{ message }}</h1>
</template>

<script>
export default {
  data() {
    return {
      message: 'Hello, world!'
    }
  }
}
</script>

在这个示例中,message 是一个普通属性,并且它的值被定义为 "Hello, world!"。在模板中使用 {{ message }} 的方式来显示这个属性的值。

计算属性

计算属性是 Vue 组件中的一种特殊属性,它的值是动态计算得出的,并且可以被缓存和监视。计算属性的值依赖于其它属性中的值,只有当依赖属性发生变化时,计算属性才会被重新计算,并且在计算过程中会执行缓存优化。

下面是一个计算属性示例:

<template>
  <h1>{{ reversedMessage }}</h1>
</template>

<script>
export default {
  data() {
    return {
      message: 'Hello, world!'
    }
  },
  computed: {
    reversedMessage() {
      return this.message.split('').reverse().join('')
    }
  }
}
</script>

在这个示例中,我们定义了一个名为 reversedMessage 的计算属性,它的值是 message 值的反转。计算属性的特点是:只要 message 发生变化,reversedMessage 的值就会重新计算,而不用对整个字符串进行反转操作。

区别说明

普通属性和计算属性的区别在于,普通属性直接访问,而计算属性需要进行动态计算。在实际使用中,计算属性常常用来处理一些复杂的逻辑操作,并将其结果缓存起来,以提高性能。而普通属性一般情况下用来存储静态的数据、标记、状态等值。

下面我们通过一个小例子演示一下它们的用途。

<template>
  <div>
    <p>昵称:{{ name }}</p>
    <p>性别:{{ gender }}</p>
    <p>年龄:{{ age }}</p>
    <p>毕业院校:{{ university }}</p>
    <p>职业:{{ profession }}</p>
    <p>用户信息:
      <ul>
        <li>昵称:{{ name }}</li>
        <li>性别:{{ gender }}</li>
        <li>年龄:{{ age }}</li>
        <li>毕业院校:{{ university }}</li>
        <li>职业:{{ profession }}</li>
      </ul>
    </p>
  </div>
</template>

<script>
export default {
  data() {
    return {
      name: '小李',
      gender: '男',
      age: '26',
      university: '华南理工大学',
      profession: '前端工程师'
    }
  },
  computed: {
    userInfo() {
      return `${this.name},${this.gender},${this.age}岁,毕业于${this.university},职业是${this.profession}`
    }
  }
}
</script>

在这个示例中,我们给每一个属性都做了展示,除此之外还在整个组件中不同的地方展示了。当我们对用户信息进行展示的时候,每次需要手动写一遍,而用计算属性来组合上面那些属性的值之后可以直接使用 {{ userInfo }} 的方式展示,而不用再写一遍。这就是计算属性的实践价值所在。

另外一个示例,假如我们需要实现一个数字输入框,要求当输入的数字大于10的时候,输入框中的数字显示为“over”,否则仍显示当前输入的数字。

<template>
  <input type="number" :value="number" @input="onChange">
  <p>输入的数字是:{{ message }}</p>
</template>

<script>
export default {
  data() {
    return {
      number: 0
    }
  },
  computed: {
    message() {
      if (this.number > 10) {
        return 'over';
      } else {
        return this.number;
      }
    }
  },
  methods: {
    onChange(e) {
      this.number = e.target.value;
    }
  }
}
</script>

在这个示例中,我们使用了普通属性number来存储输入框中的数值,使用 computed 定义了一个名为 message 的计算属性,根据 number 的值来返回不同的结果。当键入一个数字时,我们通过 @input 监听数字输入事件,把输入框中的值更新到 number 属性上。如果我们使用普通属性去计算 message,则需要使用一个更复杂的逻辑来计算,“over”和数字对应的之间的转换。而使用计算属性,我们可以在方法中直接写一个判断逻辑,然后将它的返回值缓存起来。 这就是计算属性的便利之处。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Vue组件的计算属性和普通属性的区别说明 - Python技术站

(0)
上一篇 2023年5月27日
下一篇 2023年5月27日

相关文章

  • vue数据响应式原理重写函数实现数组响应式监听

    这里我为大家详细讲解一下“Vue数据响应式原理重写函数实现数组响应式监听”这个话题。 什么是Vue数据响应式原理 首先,我们要了解Vue的数据响应式原理。Vue可以实现数据的自动化更新,是因为它采用了数据劫持和发布订阅模式的方式。 Vue在读取数据时,会通过 Object.defineProperty 方法来劫持该数据的 getter 和 setter,一旦…

    Vue 2023年5月28日
    00
  • 使用Vue3+ts 开发ProTable源码教程示例

    使用Vue3+ts开发ProTable源码,需要先了解Vue3、TypeScript和ProTable的相关知识。以下是开发教程及示例。 1. 安装ProTable 首先需要安装ProTable,在命令行中执行: npm install @ant-design-vue/pro-table –save 2. 搭建Vue3项目 使用Vue CLI创建Vue3项…

    Vue 2023年5月28日
    00
  • Vue多组件仓库开发与发布详解

    我来为您详细讲解“Vue多组件仓库开发与发布详解”的完整攻略。 概述 Vue 多组件仓库开发与发布,意味着我们可以在一个仓库内管理多个 Vue 组件,然后将这些组件发布到 package registry,以便其他人可以通过 npm 安装和使用这些组件。 Vue 组件的开发、测试、打包和发布都需要在仓库内完成,本文将以一个具体的实例进行说明。 前置知识 在进…

    Vue 2023年5月28日
    00
  • 深入了解vue-router原理并实现一个小demo

    介绍 Vue-Router 是 Vue.js 官方的路由管理器,它和 Vue.js 核心深度集成,让构建单页面应用变得易如反掌。Vue-Router 提供了两种模式:Hash 模式和 History 模式。Hash 模式下,URL 中的 Hash 值(#)用来模拟传统意义上的路由,而在 History 模式下,使用了 HTML5 History API 中新…

    Vue 2023年5月28日
    00
  • Vuex 模块化使用详解

    首先我们来介绍Vuex。 Vuex是一个专为Vue.js应用程序开发的状态管理模式,它采用集中式存储管理应用的所有组件的状态,并以相应的规则保证状态以一种可预测的方式发生变化。 对于大型的Vue应用程序,管理状态会变得复杂而混乱,因此使用Vuex是非常有帮助的。Vuex可以让我们更好地组织和管理应用程序的状态。 接下来,我们将详细介绍如何使用Vuex模块化。…

    Vue 2023年5月28日
    00
  • Vue3+Vite使用双token实现无感刷新

    下面我将详细讲解“Vue3+Vite使用双token实现无感刷新”的完整攻略。 什么是双token实现无感刷新? 双token是指前后端各自维护一个token,前端在请求后端接口时需要在请求头中携带两个token,一个是用户信息token,另一个是操作token,后端通过判断这两个token的有效性,来决定是否需要重新登录,从而达到无感知的更新token的目…

    Vue 2023年5月28日
    00
  • 如何在Vue中使用debouce防抖函数

    当我们在Vue组件中使用一些高频操作时,例如input事件的实时搜索,我们会发现输入一个字母就会发送一次请求,导致不必要的请求和资源浪费,这时候可以通过引入debounce防抖函数进行优化。下面是关于在Vue中使用debounce防抖函数的完整攻略: 1. 安装lodash debounce函数通常是使用lodash库中的_.debounce函数来实现的,因…

    Vue 2023年5月28日
    00
  • typescript nodejs 依赖注入实现方法代码详解

    下面是详细讲解“typescript nodejs 依赖注入实现方法代码详解”的完整攻略。 什么是依赖注入 依赖注入(Dependency Injection,简称DI)是一种设计模式,它使得某个类的依赖关系由外部配置文件来确定。在软件设计中,如果一个模块依赖于另一个模块,就需要在代码中显式地创建它们之间的关系。而依赖注入则是将这些依赖关系从代码中移除,从而…

    Vue 2023年5月28日
    00
合作推广
合作推广
分享本页
返回顶部