vue.js 当一个对象中的数据发生变化时,如何将该对象推送到另一个对象中?

qni6mghb  于 2023-02-19  发布在  Vue.js
关注(0)|答案(1)|浏览(146)

我有一个非常大的对象数组,其中包含各种错误日志。总共有1015个对象。目前,每当我对其中一个对象中的值做一个小的更改时,我都会保存整个数组。这会导致超时错误,因为遍历整个数组需要太长时间。
因此,我想弄清楚如何更改它,以便程序只保存一个对象,如果该对象已在前端更改。
因此,如果我有1015个对象,我只修改了2号对象中的一些内容,那么只有2号对象应该在提交时保存。
我在想,也许可以先让程序查找任何更改。然后,如果发生了更改,它会将该特定对象移动到一个新的(空)对象,然后我可以提交。
在我的代码示例中,我希望在关键字为“done”的计算属性“Fields”上实现此函数。它包含一个复选框,用于将error.done值设置为true或false。因此,我希望程序检查此特定值是否已更改。如果它已从true更改为false,或者相反,我希望将此对象发送到一个新对象。
例如,如果errors.done从true设置为false,则将已更改的对象移动到名为changedValue的新对象。

<template>
  <b-container>
    <b-card class="mt-4">
      <h5>{{ $t('events') }}</h5>
      <b-table
        :items="errors"
        :fields="fields"
        :per-page="[10, 25, 50]"
        selectable
        :select-mode="'single'"
        @row-selected="onRowSelected"
        @row-clicked="showModal"
        sort-desc
      />
    </b-card>
    <error-log-entry-modal ref="errorLogEntryModal" :selected-error-log="selectedRows"/>
    <button @click="submit">Submit</button>

  </b-container>
</template>

<script>
  import {errorService} from '@/services/error';
  import ErrorLogEntryModal from '@/components/error-log/ErrorLogEntryModal';
  import moment from 'moment';

  export default {
    components: {
      ErrorLogEntryModal,
    },
    props: {
      ownerId: String
    },
    data() {
      return {
        errors: null,
        selectedRows: []

      };
    },
    computed: {
      fields() {
        return [
          {
            key: 'done',
            label: '',
            thStyle: 'width: 1%',
            template: {
              type: 'checkbox',
              includeCheckAllCheckbox: true,
            }
          },
          {
            key: 'priority',
            label: this.$t('errorLogs.priority'),
            sortable: true,
          },
          {
            key: 'creationDateTime',
            label: this.$t('creationDateTime'),
            formatter: date => moment(date).locale(this.$i18n.locale).format('L'),
            sortable: true,
          },
          {
            key: 'stackTraceShort',
            label: this.$t('errorLogs.stackTrace'),
            sortable: true,
          },
          {
            key: 'errorMessage',
            label: this.$t('message'),
            sortable: true
          },
        ]
      },
    },
    methods: {
      load(){
          errorService.getErrorLogs().then(result => {
            result.data.forEach(log => log.stackTraceShort = log.stackTrace.substring(0,30));
            this.errors = result.data

          })
      },
      submit(){
        return errorService.setStatusOnErrorEntryLog(this.errors).then( result => {
          console.log(result)
        })

      },
      onRowSelected(fields){
        this.selectedRows = fields
      },
      showModal(){
        if (this.selectedRows) {
          this.$refs.errorLogEntryModal.show()
        }
      },
    },
    created() {
      this.load()
    },

  };
</script>
inkz8wg9

inkz8wg91#

如果我理解正确的话,选中的行对应的是错误。完成了吗?在这种情况下,你可以像这样编辑onRowSelected方法:

onRowSelected(fields){
  this.selectedRows.push(fields)
},

然后在提交方法中用这个.selectedRows替换这个.errors?

相关问题