У меня есть таблица квазаров, где свойство данных связано с состоянием Vuex (массив объектов).
При изменении состояния объекта (строки в таблице) это изменение не отображается в таблице.
Если я смотрю с помощью инструментов Vue dev, то странно то, что реквизит QTable Data действительно изменяется, но computedData.rows и computedRows не обновляются.
Как я могу принудительно обновить строки таблицы? Я хочу, чтобы изменения были видны в таблице.
На рисунке ниже видно, что строка таблицы не обновлена, но свойство данных таблицы имеет обновленное свойство.
![enter image description here](https://i.stack.imgur.com/r7cDS.png)
На втором рисунке вы видите, что свойство computerData.rows не обновлено. То же самое верно для свойства computerRows таблицы.
![enter image description here](https://i.stack.imgur.com/e60lj.png)
Ниже описано, как определяется QTable
<q-table
:data="users"
:columns="columns"
:selection="showSelectors ? 'multiple' : 'none'"
:selected.sync="selected"
:pagination.sync="pagination"
@update:pagination="pageChanged"
hide-header
row-key="id">
<template v-slot:body="props">
<q-tr :props="props" @click.native="click(props.row)" v-touch-hold.mouse="longPress">
<q-td auto-width v-if="showSelectors">
<q-checkbox dense v-model="props.selected" />
</q-td>
<q-td key="name" :props="props">{{ props.row.name }}</q-td>
<q-td key="phone" :props="props">{{ props.row.phone }}</q-td>
</q-tr>
</template>
</q-table>
Ниже приведен код для полей ввода:
<q-card class="q-pa-md" v-if="showDetails && !showSelectors" style="margin: 10px 0;" >
<q-icon name="eva-close-circle-outline" class="float-right close-icon" @click="cardClose"/>
<q-input label="Name" color="negative" stack-label v-model="name" />
<q-input label="Phone number" color="negative" stack-label v-model="phone" />
<q-input label="Remarks" color="negative" stack-label v-model="remarks" />
<q-select color="negative" v-model="locks" :options="Locks" label="Locks" multiple @input="selectLock"/>
<q-select color="negative" v-model="schedules" :options="Schedules" label="Schedules" multiple @input="selectSchedule" />
<q-select color="negative" v-model="keys" :options="Keys" label="Keys" multiple @input="selectKey" />
</q-card>
А вот и свойства моего компьютера. Имя и Телефон - это свойства, которые вы видите в таблице. Если щелкнуть строку таблицы, для формы под таблицей устанавливается currentUser . Это сделано this.$store.commit('users/setCurrentUser', row)
computed: {
...mapState({
users: state => state.users.users,
currentUser: state => state.users.currentUser,
}),
name: {
set (name) {
this.$store.commit('users/setCurrentUser', { name })
// this.$refs.table.computedData.rows = this.users
},
get () {
return this.currentUser.name
}
},
phone: {
set (phone) {
this.$store.commit('users/setCurrentUser', { phone })
},
get () {
return this.currentUser.phone
}
},
Наконец, вот код из магазина Vuex:
import { getUsers, saveUsers } from '../helpers/database'
export default {
namespaced: true,
state: {
users: [],
currentUser: {}
},
mutations: {
setUsers (state, users) {
state.users = users
},
setCurrentUser (state, payload) {
state.currentUser = Object.assign({}, state.currentUser, payload)
const index = state.users.findIndex(u => u.id === state.currentUser.id)
state.users[index] = state.currentUser
saveUsers(state.users)
}
},
actions: {
getUsers ({ commit }) {
getUsers()
.then(result => {
if (!result) {
saveUsers(seedUsers)
commit('setUsers', seedUsers)
} else {
commit('setUsers', result)
}
})
}
}
}