【问题标题】:Resetting VueJS data properties to initial values将 VueJS 数据属性重置为初始值
【发布时间】:2017-09-24 09:29:25
【问题描述】:

我有一个组件,它通过传入的组件prop 提供初始数据属性并存储在数据变量中:

<component :propvar="true"></component>

data() {
  return {
    localvar: this.propvar,
    localvar2: true
  }
}

我希望能够在使用如下方法点击“重置”按钮时将数据变量恢复为该道具的值:

methods: {
  reset() {
    Object.assign(this.$data, this.$options.data());
  }
}

问题是通过this.options.data()引用prop的值时数据变量是undefined

console.log(this.$options.data()); =&gt; Object {localvar: undefined, localvar2: true}

Example Fiddle

【问题讨论】:

    标签: javascript vue.js vuejs2 vue-component


    【解决方案1】:

    如果您确实需要通过再次触发 data() 方法来重置所有数据属性,您可以这样做:

    methods: {
      reset() {
        Object.assign(this.$data, this.$options.data.call(this));
      }
    }
    

    this.$options.data 中的this 变量引用的是选项,而不是 vue 组件实例。这就是localvar 属性为undefined 的原因。因此,如果您从 vue 实例调用它,则需要通过函数的 call() method 为其提供对 this 的引用。


    但是,在大多数情况下,我会直接分配值而不是调用Object.assign

    methods: {
      reset() {
        this.localvar = this.propvar;
      }
    }
    

    【讨论】:

    • 这是我目前的解决方法,但我仍然想知道为什么 this.$options.data() 为 localvar 返回 undefined
    • 不错!这似乎可以解决问题。只是为了澄清:在这种情况下我更喜欢使用Object.assign() 的原因是因为当你有很多道具时它会更干净(我为这个特定的组件做的 - 没有在示例中显示)。正如您所说,在大多数情况下,其他方法就可以了。谢谢!
    猜你喜欢
    • 2022-01-14
    • 2020-08-09
    • 1970-01-01
    • 2012-06-06
    • 1970-01-01
    • 2013-02-06
    • 2017-06-18
    • 1970-01-01
    • 2016-07-17
    相关资源
    最近更新 更多