从休息调用更新后,Vue v-model 不会从表单输入更新

Vue v-model doesn't update from form input after updating it from a rest call

仍在学习 Vue,但简而言之,在我执行 data = axiosAjaxResponse 之后,我在表单字段中输入的任何内容都不会在 v-model 中更新。

我有一个管理页面,它将我的道具传递给具有这样数据结构的子页面。

data() {
  return {
     Data: [{
        port: [
           {
              "portId": 11, ..., 
              schedule: [{ "scheduleId":1, ...

子页面模板

<b-row>
   all port data put into form fields
</b-row>

<b-row v-for="(schedule, index) in growData[0].port[rowIndex].schedules" :key="index">
   <b-col>
      <b-form-group label="Off Length" :label-for="'offLength' + index">
         <b-form-input :id="'offLength' + index" v-model="schedule.offLength" size="sm" trim></b-form-input>
      </b-form-group>
   </b-col>
</b-row>
<b-row>
   <b-col>
      <button v-on:click="addSchedule(rowIndex)">update</button>  
      <button v-on:click="updateData()">update</button>  
   </b-col>
</b-row>


逻辑

addSchedule(portId){  //add another schedule row
   this.Data[0].port[portId].schedules.push({startDateTime: '2020-03-12T00:00:00'})
   this.$forceUpdate();
},

async updateData() {
    var _this= this;

    var d = this.Data[0].port[_this.rowIndex]
    const { data } = await _this.$http.put(
        'https://localhost:44374/api/Schedule', d, 
        {headers: {'Content-Type': 'application/json'}}
    )
    _this.growData[0].port[_this.rowIndex] = data  //THIS KILLS ALL INPUTS
    this.$forceUpdate();
}

技术上一切正常。单击更新后,v-model(parent/child 和 vue 插件)看起来都是正确的。问题是,我现在在任何文本框中输入的任何内容都不会更新 v-model。如果我刷新页面,一切都很好。

我试过只使用这个而不是_this。我已经通过 EventBus 将数据传递回父级并在那里更新。我试过将数据放入一个新对象并进行设置。似乎没有什么不同,也没有错误。

Vue 无法拦截数组赋值以捕获它并通知观察者。

使用_this.$set(_this.growData[0].port, _this.rowIndex, data)

这将执行数组分配并通知观察者该数据。

你也可以使用Vue.set(),这是一样的。

此处提供有关此一般主题的更多背景信息:

https://vuejs.org/v2/guide/reactivity.html#Change-Detection-Caveats