美文网首页
《图解Vue3.0》- 第12节 组件方法&计算属性&监听器

《图解Vue3.0》- 第12节 组件方法&计算属性&监听器

作者: 张中华 | 来源:发表于2021-06-01 06:33 被阅读0次

methods

我们用 methods 选项向组件实例添加方法,它是一个包含所需方法的对象。
Vue 自动为 methods 绑定 this,以便于它始终指向组件实例。这将确保方法在用作事件监听或回调时保持正确的 this 指向。在定义 methods 时应避免使用箭头函数,因为这会阻止 Vue 绑定恰当的 this 指向。
这些 methods 和组件实例的其它所有 property 一样可以在组件的模板中被访问。在模板中,它们通常被当做事件监听使用。

总结

在methods里面定义好方法,然后在组件内的其他地方进行调用。

示例

常用的示例,在button上添加一个click事件,当点击button时,出发methods里面的clickBtn方法。跟原生的书写方法很类似,只是原生的把方法写到了script标签内。vue的写法还是和原生开发很相似的,将单个组件内的html/css/js融合到一个文件内,降低了组件间的耦合性。

<template>
    <div class="container">
        初始值是: {{ initCount }}
        点击的次数: {{ count }}
        <button @click="clickBtn">按钮</button>
    </div>
</template>

<script>
export default {
    props: ['initCount'],
    data() {
        return {
            count: 0
        }
    },
    methods: {
        clickBtn() {
            this.count++;
        }
    }
}

</script>

<style scoped>
button {
    color: red;
    border: 1px solid #909090;
}
</style>

computed

中文:计算属性
模板内的表达式非常便利,但是设计它们的初衷是用于简单运算的。在模板中放入太多的逻辑会让模板过重且难以维护。对于任何包含响应式数据的复杂逻辑,你都应该使用计算属性。

<template>
    <div class="container">
        <h1>Test methods</h1>
        <div>click {{ count }} times</div>
        <button @click="click1">click1</button>

        <h1>Test computed</h1>
        <div>click count + 1: {{ countPlusOne }}</div>
    </div>
</template>

<script>
import { defineComponent } from '@vue/composition-api'
export default defineComponent({
    data() {
        return {
            count: 0,
        }
    },
    methods: {
        click1: function() {
            this.count++;
        }
    },
    computed: {
        countPlusOne: function() {
            return this.count + 1;
        },
    }
})
</script>

<style scoped>
</style>

计算属性缓存 vs 方法

我们可以将同一函数定义为一个方法而不是一个计算属性。两种方式的最终结果确实是完全相同的。然而,不同的是计算属性是基于它们的反应依赖关系缓存的。计算属性只在相关响应式依赖发生改变时它们才会重新求值。

对比总结

个人理解,方法,计算属性,通过名字就知道它们的用途了。方法里面主要写一些事件处理的方法过程。而计算属性,以作为属性为主,具有依赖缓存的功能。
方法多由界面触发,计算属性多为实现数据与界面的绑定,数据会因依赖的的变化而变化,从而触发界面的重新渲染。

watch

Vue 提供了一种更通用的方式来观察和响应当前活动的实例上的数据变动:侦听属性。当你有一些数据需要随着其它数据变动而变动时,便可能使用监听属性。

虽然计算属性在大多数情况下更合适,但有时也需要一个自定义的侦听器。这就是为什么 Vue 通过 watch 选项提供了一个更通用的方法,来响应数据的变化。当需要在数据变化时执行异步或开销较大的操作时,这个方式是最有用的。

注意

watch最好不要滥用,能用计算属性的地方,最好不要用watch, 毕竟计算属性已经做好了对数据的监听,不需要自己去做。

那么什么情况下使用侦听属性呢

先看看watch相比computed有哪些特殊的支持:

  • 支持异步操作
  • 监听复杂的数据
  • 可以获取变化前的数据进行比较处理
示例
<template>
  <div class="container">
    <input @change="change" v-model="value" />
  </div>
</template>

<script>
import { defineComponent } from '@vue/composition-api'

export default defineComponent({
  data() {
    return {
      value: ''
    }
  },
  watch: {
    value: function (currentValue, oldValue) {
        console.log(`当前的数据:${currentValue}`);
        console.log(`之前的数据:${oldValue}`);
        console.log('\n');
        // todo
    }
  }
})
</script>

<style lang="sass" scoped>
</style>

方法 vs. 计算属性 vs. 侦听属性

  • methods: 存放的方法是一些内部方法、事件的回调等。
  • watch: 用于监听数据的实时的变化。在数据变化的回调中执行异步操作或者开销很大的时候使用。
  • computed: 也是实时监听数据变化,做出相应的变化,跟watch不同的是他可以被看成一个data里面的属性值来使用。所以当我们需要监听一个值并且需要生成一个新的属性时就可以使用computed。

相关文章

  • 《图解Vue3.0》- 第12节 组件方法&计算属性&监听器

    methods 我们用 methods 选项向组件实例添加方法,它是一个包含所需方法的对象。Vue 自动为 met...

  • Vue学习总结

    基本结构 源生指令 绑定事件 数据渲染 控制隐藏 渲染循环 数据绑定 组件间通信 计算属性 监听器 父子组件通信 ...

  • 监听器和计算属性的区别watch,computed

    计算属性computed和监听器watch区别?1.能使用计算属性computed的尽量使用计算属性,但是计算属性...

  • Vue.js,学习心得(特别篇)盖楼中

    常用函数 声明是子组件,调用是父组件 计算属性: computed 有缓存例子: computed:{}方法: ...

  • computed与watch的区别

    计算属性computed和监听器watch都可以观察属性的变化从而做出响应,不同的是: 计算属性computed更...

  • 框架部分

    Vue 环境搭建、配置路由 基础指令(选项数据、模板语法) 计算属性、方法、侦听器 组件 组件传值(父子组件、兄弟...

  • 【Vue3.0】- 计算属性

    计算属性 计算属性 API: computed 例子 先使用 ref API 创建了一个响应式对象 count 再...

  • Vue3.0破坏性变化----异步组件

    vue3.0中异步组件要求使用defineAsyncComponent方法创建 由于vue3中函数式组件必须定义为...

  • 属性和方法

    1、属性 存储属性 延迟存储属性 计算属性 只读计算属性 只有 getter 方法但没有 setter 方法的计算...

  • vue生命周期

    beforeCreate 组件实例刚被创建,组件属性计算之前,如data属性等 created 组...

网友评论

      本文标题:《图解Vue3.0》- 第12节 组件方法&计算属性&监听器

      本文链接:https://www.haomeiwen.com/subject/jdxvsltx.html