vue2有方法重新初始化data么

我现在有一个表单,表单提交成功后,希望组件恢复到初始状态,重置data数据,不想一个一个赋值初始化,太累了

阅读 21.5k
4 个回答

重新调用data方法,即可重置

Object.assign(this.$data, this.$options.data())

看了下Vue 2的API,并没有提供这种方法。
不过为了重置data数据大可不必专门添加一个方法。Vue用的是数据驱动,如果data有改动的话会自动更新相关的DOM。你可以将初始data数据保存下来,等表单提交成功后,重新给data赋值就行。
另外一个方法是,Form表单元素提供了一个reset方法,你可以在表单提交成功后使用form.reset()方法来重置表单,如果你表单控件有绑定数据,那么data数据也会同样更新。
上面两种方法效果应该都是相同的

将表单的各个数据,都绑定到一个对象上,表单提交完成后,将这个对象重新赋值就行了

有的时候使用 Object.assign(this.$data, this.$options.data()) 还不行,
例如 :

<script>
export default {
  components: {},
  props: {},
  data() {
    return {
      form: {
        value: '',
      },
      rules: {
        value: [
          { required: true, message: this.$t('请选择'), trigger: 'change' }
        ],
      },
    }
  },
  computed: {},
  watch: {},
  created() {},
  mounted() {},
  methods: {}
}
</script>

这个时候使用 Object.assign(this.$data, this.$options.data()) 提示异常: TypeError: this.$t is not a function


可以使用: this.form = this.$options.data.call(this).form 解决这种情况;
例如:

handleClose() {
  if (this.$refs.form) this.$refs.form.resetFields()
  this.form = this.$options.data.call(this).form
  this.$emit('update:visible', false)
}
推荐问题
宣传栏