Vue 中怎么重置 data

1,647 阅读2分钟

在某些情况下,需要重新使用data中的数据,但是data中的数据已经被各种表单、变量等赋值,那么怎么重置data的值呢?

那么此时我们有两种办法

1. 逐个赋值

...
data() {
	return {
		name: '',
		sex: '',
		desc: ''
	}
}
...
 
// 逐个赋值
this.name = ''
this.sex = ''
this.desc = ''
 

但这种方法只在对象数量少的时候可以用一下,一个一个去重新赋值比较麻烦,而且代码看起来也会比较乱,并且如果我需要重置的对象很多怎么办,此时可以用另一种方法

2. 使用Object.assign()

2.1 MDN关于该方法的介绍:

Object.assign() 方法用于将所有可枚举属性的值从一个或多个源对象复制到目标对象。它将返回目标对象。

第一个参数是目标对象,第二个参数是源对象,就是将源对象属性复制到目标对象,返回目标对象

其中就是将一个对象的属性copy到另一个对象

 this.$data 获取的是当前状态下的data对象 
 
this.$options.data() 获取该组件初始状态下的data
 
Object.assign 则可以将一个对象赋值给另一个对象
 
 
 
所以,下面就可以将初始状态的data复制到当前状态的data,实现重置效果:
 
Object.assign(this.$data, this.$options.data.call(this))
 

注意: 这里调用options.data 时请用call调用并传入当前this,不这么做的话默认的this可能会指向全局vue对象,这就会导致它报错

扩展

Object.assign(target, ...sources) 方法还可以用来合并对象:

const o1 = { a: 1 };
const o2 = { b: 2 };
const o3 = { c: 3 };
 
const obj = Object.assign(o1, o2, o3);
console.log(obj); // { a: 1, b: 2, c: 3 }
console.log(o1);  // { a: 1, b: 2, c: 3 }, 注意目标对象自身也会改变。

如果对象中含有相同属性,取最后一个属性:

const o1 = { a: 1, b: 1, c: 1 };
const o2 = { b: 2, c: 2 };
const o3 = { c: 3 };
 
const obj = Object.assign({}, o1, o2, o3);
console.log(obj); // { a: 1, b: 2, c: 3 } 属性取最后一个对象的属性