Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
164 views
in Technique[技术] by (71.8m points)

javascript - Vue JS v-model data doesn't update when used with watch

Here is my code

data() {
  return {
    crop_mode: 'portrait',
    widget_data:''
  }
},

watch: {
  widget_data: function (val) {
    this.crop_mode = val.crop_mode
  },
},

This code is inside a modal component. So whenever a modal is opened, "widget_data" changes. And this widget_data has a "crop_mode" which needs to assigned to the data variable "crop_mode"

This works fine if I console.log the val.crop_mode but when I do v-model on crop_mode like below, it doesn't update the checked radio button.

<label class="custom-radio block">
  <input
    type="radio"
    value="portrait"
    name="crop_mode"
    v-model="crop_mode"
  />
  <span>Portrait</span>
</label>
<label class="custom-radio block">
  <input
    type="radio"
    value="landscape"
    name="crop_mode"
    v-model="crop_mode"
  />
  <span>Landscape</span>
</label>
<label class="custom-radio block">
  <input
    type="radio"
    value="square"
    name="crop_mode"
    v-model="crop_mode"
  />
  <span>Square</span>
</label>
question from:https://stackoverflow.com/questions/65921723/vue-js-v-model-data-doesnt-update-when-used-with-watch

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

You should add deep:true option because It looks like widget_data is an object with nested values:

watch: {
  widget_data:{
      handler(val) {
         this.crop_mode = val.crop_mode
      },
     deep:true
    }
},

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...