2017-04-26 6 views
3

Iは、渡された成分prop介して初期データプロパティを提供し、データ変数に格納されているコンポーネントを有する:リセットVueJSデータ特性

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

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

Iが復帰できるようにしたいとこの小道具の値に戻ってデータ変数は、このような方法でボタンを「リセット」打つとき:

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

問題がthis.options.data()経由小道具の値を参照するときに、データ変数がundefinedであるということである:

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

Example Fiddle

答えて

7

あなたが本当にもう一度data()方法を焼成することにより、データのすべてのプロパティをリセットする必要がある場合、あなたはそのようにそれを行うことができます。

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

this変数this.$options.dataは、vueコンポーネントのインスタンスではなくオプションを参照しています。そのため、localvarプロパティはundefinedでした。したがって、vueインスタンスから呼び出す場合は、関数call() methodを使用してthisへの参照を渡す必要があります。


しかし、ほとんどの状況では、私はちょうど代わりObject.assignを呼び出すの値を直接割り当てます:

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

今の私の回避策ですが、私はまだ、なぜ 'この$オプション知りたいのですがそれ。 .data() 'はlocalvarのために未定義を返します – Stetzon

+0

ああ、ok。私は私の答えを更新します – thanksd

+0

ニース!それはトリックを行うようだ。この例で 'Object.assign()'を使いたい理由は、多くの小道具(これはこの例では示していません - この例では示していません)をたくさん持っているときれいになるからです。あなたが言ったように、ほとんどの状況下で、他の方法はうまくいくでしょう。ありがとうございました! – Stetzon

関連する問題