2017-10-04 21 views
0

変数(data(){}からデータを取得すると変数が更新され、データも更新されるという奇妙なjs/vuejsの問題があります。vuejsメソッド変数がデータ変数を更新するのを止める方法

ここはコード例です。これは、ユーザーがプロフィール画像がありませんならば、それはユーザが既にイメージを持っている場合、それはリストに現在の画像を追加し、APIに送信します、axios経由でAPIにイメージ名を送信しますチェック:

addImage (file) { 
    var URL = 'http://foo.com/api'; 

    var images = this.person.images; 

    let att = [] 
    if(images.length) { 
     att = images 
     att.push(file.name) 
    }else{ 
     att.push(file.name) 
    } 

    axios.post(URL, { 
     attachements: att 
    }).then(

     // update dom 

    ).catch(err => {}) 
}, 

ここで問題となるのは、this.person.imagesが最新のイメージリストを取得するために使用していても、更新されてしまうことです。

att.push(file.name)が実行されたときにif/elseブロックをチェックすると、this.person.images;も更新されます。 attを使用して、現在の画像リストを保存してapiに送信します。

this.person.imageを使って情報を取得するにはどうすればよいですか?

私はconst att = this.person.imageを使用できましたが、それ以降はattを更新することはできません。ので、あなたがJavaScriptで

答えて

1

もっと簡単な解決策は、ループ

var images=JSON.parse(JSON.stringify(this.person.images)) 

避けるだろう。

1

var images = this.person.images; 

画像の値は今や "this.person.images" のリファレンスです。その問題を解決するための

ひとつのアイデアは、「画像」アレイの各項目をループしているので、のような「ATT」のアレイに追加します。

for (var i = 0,len = images.length; i < len; i++) { 
      att.push(images[i]); 
     } 

addImage (file) { 
    var URL = 'http://foo.com/api'; 

    var images = this.person.images; 

    let att = [] 
    if(images.length) { 

    for (var i = 0,len = images.length; i < len; i++) { 
     att.push(images[i]); 
    } 
     att.push(file.name) 
    }else{ 
     att.push(file.name) 
    } 

    axios.post(URL, { 
     attachements: att 
    }).then(

     // update dom 

    ).catch(err => {}) 
}, 

基本的にatt = imagesを置き換えます

+0

私はこれが唯一の解決策であることに驚いています。私は同じことをすることを考えていたが、よりよい方法があると仮定した。ある? – hidar

+0

Javascriptでこの配列関数を見てください、あなたの問題の解決策かもしれません。 https://www.w3schools.com/jsref/jsref_copywithin.asp – Tarek

+0

var images = JSON.parse(JSON.stringify(this.person.images))。簡単な解決策としてこれを使用する –

関連する問題