2016-12-13 16 views
0

私は、時計を使って製品オブジェクトの変更を追跡し、それに基づいて行動することを実験しています。私は、言う、私は深いフォームを使用しているオブジェクトではなく、単純な文字列を見ているので:この例では、私は1つの変更をログどこので

watch: { 
     product: { 
      handler: function (val, oldVal) { 
       console.log("Current = "+val.identifier);//example field 
       console.log("Old = "+oldVal.identifier); 
      }, 
      deep: true 
     }, 
    }, 

何かが、しかし、非常に適切ではありません'識別子'の場合、古い値と新しい値は常に同じです(両方とも正しい現在の値を示します)。

この変更を引き起こすのは何ですか?また、両方の値が同じである理由は何ですか?

+0

スニペットまたは動作を示すプランナーでサンプルを作成します。あなたに何か建設的なことを伝えるのに十分ではありません。 –

+0

どのように 'product'を変更していますか?製品が変更されている場所でも、そのコードを含めることができますか? – Saurabh

+0

例ではわずかに複雑です。しかし、単純に言うと、私はカスタム 'テキストフィールド'入力コンポーネントを持っています。これは、 'のように使われます。テキストフィールドコンポーネントには、入力タグ「input:name = 'name' class = 'form-control'」があります。value = "value" @input = "$ emit( 'input'、$ event.target.value) ">。つまり、単にv-modelを使っているだけです。私が得られないことは、値がどのように同じになる可能性があるかですが、更新されます。 $ watchの目的は、変更時に呼び出されるということで、古い値と新しい値が常に異なっていなければならないということでした。 –

答えて

2

これは​​からのものである:

注:オブジェクトまたは配列を変異(よりむしろ交換)場合、それらが同じオブジェクト/配列を参照するため、古い値が新しい値と同じになります。 Vueはpre-mutate値のコピーを保持しません。

関連する問題