编程技术文章分享与教程

网站首页 > 技术文章 正文

vue.js使用小技巧

hmc789 2024-11-26 03:39:15 技术文章 1 ℃

背景

我们在写vue2项目时,经常会遇到需要重置数据的场景,例如有这样一个组件:

data() {
	return {
  	title: '',
    subTitle: '',
    author: '',
    content: ''
  }
},
methods: {
  // 调提交数据接口
	submit() {
  	http.post('xxxx', {
    	// 要提交的一些数据。。。
      title: this.title,
      subTitle: this.subTitle,
      author: this.author,
      content: this.content
    }).then(res => {
    	// 提交成功
      // 清空数据
      this.title = ''
      this.subTitle = ''
      this.author = ''
      this.content = ''
    })
  }
}

以上代码不仅看着不够优雅,写起来也是相当麻烦,字段少还可以这么写,那要是几十个甚至更多的字段呢?

有人说可以用一个对象把需要重置的字段包起来,像下面这样:

data() {
	return {
  	formData: {
    	title: '',
      subTitle: '',
      author: '',
      content: ''
    }
  }
},
methods: {
  // 调提交数据接口
	submit() {
  	http.post('xxxx', {
    	// 要提交的一些数据。。。
      ...this.formData
    }).then(res => {
    	// 提交成功
      // 清空数据
      this.formData = {
      	title: '',
        subTitle: '',
        author: '',
        content: ''
      }
    })
  }
}

看上去好像是优雅一点了,少了几行代码,但也是换汤不换药。那么有没有一种方法可以一行代码重置呢?

答案是:当然有。

我们都知道尤大发布了vue3,与vue2最大的不同就是,vue2被称为选项式(Option)api,vue3被称为组合式(Composition)api。

在vue2中,我们可以通过this关键字来访问当前vue实例的属性和方法,其中有一个特殊的属性,$options

$options的值是个对象{},打印它可以看到内部有一个data(){}函数,也就是我们在组件中声明的data函数,这个函数返回了一些我们自己定义的字段。

那么我们就可以再次调用data这个函数,不就可以拿到初始值了吗?

搜索引擎搜索:“vue2重置数据”。基本上可以得到两种答案:

// 第一种
this.formData = this.$options.data().formData
// 第二种
Object.assign(this.formData, this.$options.data().formData)
// 当然也可以使用
Object.assign(this.$data, this.$options.data())

解释

以上代码解释

vue中:

this.$data 获取当前状态下的data

this.$options.data() 获取该组件初始状态下的data

区别

那么以上两种方法有什么区别呢?

乍一看没区别,运行起来也没区别,实际上在某种场景下是有区别的。

查看MDN,Object.assign(target, ...sources) 方法可以合并两个对象,会改变target本身,如果两个对象中有相同的属性,后面的会覆盖前面的。而且如果后面的对象里新增了一些属性,也会被合并到目标对象。但是第一种方法就不会,而是会完全重置到data最初始的状态,这就是二者的区别。具体使用哪一种还是要看具体场景。

Tags:

标签列表
最新留言