前提・実現したいこと
独学でVue.jsを学習しながら入力画面を作っています。
エラー変数の初期化→エラーチェックの順でオブジェクト型の変数を更新したいと考えております。
データが代入されたかどうか確認するために、console.logを利用して確認を行っております。
知見が浅くプロパティを指定したときとオブジェクトを指定したときで表示が異なる理由が分からず困っております。
「何故cosole.logで出力時に想定していた内容で出てこないのか?」をご教授いただければ幸いです。
発生している問題・エラーメッセージ
zipcodeの出力結果がisError:false
,messages:null
と表示されない理由が知りたいです
プロパティを個別で指定してconsole.log
を行うと初期化されていることが分かりましたが、オブジェクト指定で出力した場合と内容が異なっており正常に初期化されているのか分からないため表示が異なる理由が知りたいです。
// 結果 エラー初期化 false null { zipcode: { isError:true, messages:Array(1) 0: '郵便番号から住所を取得できませんでした。' } }
該当のソースコード
main.vue
1<template> 2 <div id="app"> 3 <input type="text" v-model="address.zipcode"> 4 <button @click="search">検索</button> 5 <!-- 省きます --> 6 </div> 7</template> 8<script> 9export default { 10 data(){ 11 return { 12 address:{ 13 zipcode: "", 14 address1: "", 15 address2: "", 16 }, 17 error: { 18 zipcode: {isError:false, messages:null}, 19 address1: {isError:false, messages:null}, 20 address2: {isError:false, messages:null}, 21 }, 22 } 23 }, 24 methods: { 25 search(){ 26 // エラー変数初期化 27 this.errorInitialization('zipcode'); 28 // データ取得ロジック 29 // エラーメッセージの追加 30 this.errorAddMessage('zipcode','郵便番号の住所を取得できませんでした'); 31 }, 32 errorInitialization(errorTarget){ 33 // エラー初期化 34 console.log('エラー初期化'); 35 this.$set(this.error[errorTarget],'isError',false); 36 this.$set(this.error[errorTarget],'messages', null); 37 // データが初期化されたか確認 38 console.log(this.error[errorTarget].isError); 39 console.log(this.error[errorTarget].messages); 40 // console.logした結果は初期化されていない 41 console.log(this.error); 42 }, 43 errorAddMessage(errorTarget,message){ 44 // エラーメッセージの追加 45 this.$set(this.error[errorTarget],'isError',true); 46 this.$set(this.error[errorTarget],'messages',[...this.error[errorTarget].messages??'',message]); 47 }, 48 } 49} 50</script>
試したこと
色々とネットで調べてみましたが、納得のいく内容が見つかりませんでした。
this.error[errorTarget].isError=false;
という風に直接代入を行っておりましたが、Vue.$setに変更してみました。現象は変わりませんでした
補足情報(FW/ツールのバージョンなど)
Vue.js 2.5.17
回答2件
あなたの回答
tips
プレビュー