vue中的computed 和 vm.$data 原理解析

yizhihongxing

当我们在使用Vue.js时,我们会经常接触到computed属性和vm.$data数据对象,其中computed属性是通过函数动态计算并返回值的,而vm.$data是Vue实例数据对象,保存了Vue实例中所有的数据。下面我们来详细讲解一下computed和vm.$data的原理解析。

computed属性的原理解析

Computed属性是Vue.js中的一个非常重要的属性,我们可以直接在Vue实例中定义一个computed属性,并在模板中使用该属性的值,从而实现基于特定数据计算而来的动态结果。Computed属性的原理解析如下:

  1. 当一个computed属性被定义时,Vue会为该属性创建一个getter函数,并将该函数添加至Vue实例的computed对象中。

  2. 当computed属性被使用时,getter函数会被调用,并根据当前的数据计算出一个值。

  3. 当使用该computed属性的依赖数据发生变化时,该computed属性所依赖的数据就会被标记为无效状态,下一次获取computed属性值时,Vue会重新计算新的值。

下面是一个简单的computed示例:

<template>
  <div>
    <p>商品数量:{{ num }}</p>
    <p>商品总价:{{ totalPrice }}</p>
  </div>
</template>

<script>
export default {
  data() {
    return {
      price: 10,
      count: 2
    }
  },
  computed: {
    num() {
      return this.count;
    },
    totalPrice() {
      return this.count * this.price;
    }
  }
}
</script>

上面的代码中,我们定义了一个计算商品总价的computed属性totalPrice,并在模板中使用该属性的值。当修改商品数量时,该computed属性所依赖的数据会被标记为无效状态,Vue会重新计算新的值。

vm.$data数据对象的原理解析

Vue实例是通过将一个数据对象传入Vue构造函数创建的,这个数据对象被称为“数据代理对象”,包含了Vue实例中所有的数据。我们可以通过Vue实例中的vm.$data属性获取到这个数据对象,并操作它中的数据。vm.$data数据对象的原理解析如下:

  1. 当Vue实例被创建时,Vue会将数据对象的所有属性转变为getter/setter,从而实现“数据代理”的功能。

  2. 当在模板中使用数据时,getter函数被调用并返回该数据的值。

  3. 当数据发生变化时,setter函数被调用并通知Vue重新渲染视图。

下面是一个简单的vm.$data示例:

<template>
  <div>
    <p>{{ message }}</p>
    <button @click="updateMessage">更新</button>
  </div>
</template>

<script>
export default {
  data() {
    return {
      message: 'Hello, World!'
    }
  },
  methods: {
    updateMessage() {
      this.$data.message = 'Hi, there!';
    }
  }
}
</script>

上面的代码中,我们在模板中使用了vm.$data.message属性,并通过updateMessage方法修改了该属性的值。当数据发生变化时,setter函数会被调用并通知Vue重新渲染视图。

综上所述,computed和vm.$data是Vue.js中非常重要的两个属性,它们都是实现Vue数据响应式的核心之一。在实际开发中,我们需要充分掌握它们的原理,并灵活应用到项目中。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:vue中的computed 和 vm.$data 原理解析 - Python技术站

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

相关文章

  • 如何在Vue中使用protobuf

    在Vue中使用protobuf需要先安装protobufjs库。安装命令为:npm install protobufjs –save 安装完成后,在Vue组件中使用protobuf的步骤如下: 创建protobuf格式的数据 首先需要创建protobuf格式的数据,关于如何创建protobuf格式数据,可以参考protobufjs官网的文档。 以下是一个简…

    Vue 2023年5月28日
    00
  • Vue2 与 Vue3 的数据绑定原理及实现

    Vue2 与 Vue3 的数据绑定原理及实现 Vue2 的数据绑定原理及实现 Vue2 的数据绑定原理: Vue2 的数据绑定使用的是 Object.defineProperty,基于数据劫持来监听数据变化。(即通过 getter 和 setter 对数据的读写进行劫持实现数据监听) Vue2 实现数据绑定的步骤: 初始化:生成观察者Watcher对象,收集…

    Vue 2023年5月27日
    00
  • vue-cli 3如何使用vue-bootstrap-datetimepicker日期插件

    使用vue-cli 3来集成vue-bootstrap-datetimepicker日期插件,需要使用以下步骤: 步骤一:安装依赖 在命令行中进入项目根目录,然后运行以下命令来安装需要的依赖: npm install vue-bootstrap-datetimepicker –save 步骤二:引入CSS和JS文件 在你的Vue组件之前,需要引入CSS和J…

    Vue 2023年5月29日
    00
  • vue中的事件修饰符介绍和示例

    当在 Vue 模板中使用事件处理函数时,我们可以添加事件修饰符,这些修饰符用来表示某个事件应该如何被处理。下面我们来详细了解 Vue 中事件修饰符的使用。 修饰符的语法 Vue中的事件修饰符通过添加点号来表示,例如: <button v-on:click.prevent="submit">Submit</button&g…

    Vue 2023年5月27日
    00
  • Vue+Canvas绘图使用的讲解

    下面是Vue+Canvas绘图的攻略: 1. 准备工作 在Vue项目中引入canvas,你可以在main.js文件中引入VueKonva插件,该插件使得Canvas的使用更简单,也方便了对canvas的管理,引入方式如下: import Vue from ‘vue’ import VueKonva from ‘vue-konva’ Vue.use(VueKo…

    Vue 2023年5月28日
    00
  • Idea安装Eslint插件提示:Plugin NativeScript was not installed的问题

    如果在Idea中安装Eslint插件时出现了“Plugin NativeScript was not installed”的提示,可能是由于Eslint插件需要依赖NativeScript插件而导致的。以下是解决此问题的完整攻略: 安装NativeScript插件 首先需要安装NativeScript插件。可以通过Idea的插件市场进行安装,也可以在设置中搜…

    Vue 2023年5月28日
    00
  • vue简单的store详解

    Vue简单的Store详解 在Vue中,通过使用Vuex来管理应用的状态。它包含了一个全局的状态管理器,通过单向数据流的方式来管理数据。Vuex可以集中管理组件之间的数据共享,以及对数据的具体控制。 Vuex Store 在Vuex中,一个store就是把用户的所有状态集中到一起的容器,可以通过store中的state来管理用户的所有状态。在store中,可…

    Vue 2023年5月28日
    00
  • 详解Vue 如何监听Array的变化

    当使用 Vue.js 来开发 web 应用时,你会经常遇到需要变更数组中的元素的情况。为了自动更新视图,需要监听数组的变化并重新渲染相关的内容。这里就来详解一下 Vue 如何监听数组变化。 在 Vue2.0 之前,Vue 提供的是一个 $watch 函数来监听数组的变化。但是它有一些局限,他只能监听到数组的拷贝,在数组变化时也会得到通知,但无法监听到数组中元…

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