美文网首页
Vue如何在工具函数中操作组件的data?

Vue如何在工具函数中操作组件的data?

作者: microkof | 来源:发表于2020-04-21 15:25 被阅读0次

前言

在使用vue框架之后,我们发现原本复杂的JS逻辑变得简单了,但是,在复杂的项目中,一个页面的JS逻辑代码依然可能要写几千行,这就迫使你要给JS逻辑代码做拆分,本着“函数功能单一性”的原则,可能往往要拆出几个或者十几个工具函数。这时候怎么办?

有人说:用mixins,mixins里写methods,把几十个函数写进去。

听起来是不错,也有一定可行性,但是,通常我们认为methods是给用户事件和生命周期准备的,如果该组件的用户事件有2个,生命周期比如created又占用了1个,那么我们通常希望看到3个methods,但是你的做法是出现了几十个methods,这也是对methods的滥用。

又有人说:可以把数据放到vuex中。

这个不多说,属于对vuex的滥用,methods是清爽了,vuex的mutations又爆炸了。

最后有人说:那就老老实实写工具函数,然后import。

听起来也不错,也有很高可行性,但是,如果工具函数要操作组件data,应该怎么写呢?工具函数中的this指向的可不是调用它的组件。怎么办?今天聊聊这个话题。

第一种方法,data传参

我的工具函数如下:

function utilsA(a) {
  return a + a;
}

export default utilsA;

组件中:

import utilsA from '@/utils/utilsA';
methods: {
    foo() {
      this.a = utilsA(this.a);
      // ...
    },
}

这种方式的优点:

  • 显式传参,一目了然。

这种方式的缺点:

  • 你要去关心要传什么参数。

  • 工具函数修改data不一定成功,因为我们知道,参数是基础类型的话,是传值,是引用类型的话,是传引用。所以,参数是基础类型的话,无法在工具函数中修改data本体,必须有返回值,返回到组件中再修改data;如果参数是引用类型的话,倒是可以修改data本体。

第二种方法,.bind(this)

我的工具函数如下:

function utilsA() {
  this.a = this.a + this.a;
}

export default utilsA;

组件中:

import utilsA from '@/utils/utilsA';
methods: {
    foo() {
      utilsA.bind(this)();
      console.log(this.a);
      // ...
    },
}

优点:

  • 无需参数传递,无需考虑传值和传引用的问题。

  • 无脑.bind(this)即可,在工具函数中可以操作组件实例的任何数据,也可以调用组件实例的任意方法。

  • 工具函数中可以直接操作基本类型的data。

  • this只是一个指针,绑定this的效率很高。

缺点:

  • 基本无缺点,只是不要忘了写.bind(this)。

相关文章

  • Vue如何在工具函数中操作组件的data?

    前言 在使用vue框架之后,我们发现原本复杂的JS逻辑变得简单了,但是,在复杂的项目中,一个页面的JS逻辑代码依然...

  • 微信小程序和vue的区别

    数据类型 vue组件中data必须是函数 data(){return{}},new Vue中的选项可以是函数也可以...

  • Vue组件data必须是函数

    Vue组件data必须是函数 一、组件data() 函数 定义一个组件 注册组件Vue.component('cp...

  • Vue组件中的data和methods

    一、组件中的data 组件中也可以有自己的data。 但是组件中的data属性只能是一个函数方法(vue实例中的d...

  • vue 中的 data 为什么是函数?

    new Vue() 实例中,data可以是直接是一个对象,为什么在vue组件中,data必须是一个函数呢?因为组件...

  • Vue中的props理解

    Vue组件 Vue实例中的data属性是一个对象,然而组件中的data属性是一个函数。这是因为一个组件可以在同一个...

  • Vue笔记

    mint-ui vue生命周期钩子函数/beforeCreate 组件实例刚被创建,组件属性计算之前,如data属...

  • 2-2 vue data一定是函数

    data一定是函数 data必须是函数 使用组件时,大多数可以传入到 Vue 构造器中的选项都可以在 Vue.ex...

  • vue组件

    组件 组件是可复用的 Vue 实例,且带有一个名字 组件中data是一个函数,返回一个json 全局组件 Vue....

  • Vue前端面试2021-018

    1、为什么组件中的data是一个函数? Vue中的组件是要被重复使用的,如果data只是一个对象,多个复用的组件他...

网友评论

      本文标题:Vue如何在工具函数中操作组件的data?

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