Vue.js 更新数组,不重新加载所有数据

kewin123

我是 Vue.js 和 JavaScript 的新手。我只想知道如何更新数组(在添加/编辑/删除上)而不是再次重新加载所有数据。仅在打开带有地址的页面时加载所有数据。

这是我的代码:

<template v-else>
<div>
    <div class="page-header with-actions">
        <h1>Addresses</h1>
        <div class="actions">
            <b-btn @click="addAddress" variant="primary"><i class="oi oi-plus"></i> Add Address</b-btn>
        </div>
    </div>
    <div v-if="isLoaded === true">
        <div v-if="addressList.length">
            <b-form @submit.prevent="submit">
                <validation-summary :errors="errors"></validation-summary>

                <div class="row">
                    <div class="col-sm-4" v-for="address in addressList">
                        <div class="card bg-light mb-4">
                            <div class="card-header">
                                {{address.countryName}}
                                <div class="float-right">
                                    <b-btn @click="editAddress(address.id)" class="btn btn-default btn-sm" data-toggle="tooltip" title="Edit address">
                                        <i class="fa fa-edit" aria-hidden="true"></i>
                                    </b-btn>
                                    <b-btn @click="deleteAddress(address.id)" class="btn btn-default btn-sm" data-toggle="tooltip" title="Delete address">
                                        <i class="fa fa-trash" aria-hidden="true"></i>
                                    </b-btn>
                                </div>
                            </div>
                            <div class="card-body">
                                <em class="card-text">{{address.city}},</em><br />
                                <em class="card-text">{{address.streetAddress}},</em><br />
                                <em class="card-text">{{address.zip}}</em><br />
                            </div>
                        </div>
                    </div>
                </div>
            </b-form>
        </div>
        <div v-else class="alert alert-info" role="alert">
            There are no <strong>addresses</strong> yet!
        </div>
    </div>
    <add-address-modal ref="addAddressModal" @success="addressAdded"></add-address-modal>
    <edit-address-modal ref="editAddressModal" @success="addressEdited></edit-address-modal>
</div>
</template>

<script>
import Vue from 'vue';
import modalFormMixin from 'mixins/modal-form-mixin';
import formMixin from 'mixins/form-mixin';
import accountService from 'services/account-service';

import AddAddressModal from './add-address-modal';
import EditAddressModal from './edit-address-modal';

export default {
    mixins: [modalFormMixin],
    mixins: [formMixin],

    components: {
        'add-address-modal': AddAddressModal,
        'edit-address-modal': EditAddressModal
    },

    data() {
        return {
            addressList: [],
            isLoaded: false,
        }
    },

    async beforeRouteEnter(to, from, next) {
        next(async (c) => await c.initData());
    },

    methods: {
        async initData() {
            await this.loadAddressList(); //when opening page

            this.isLoaded = true;
        },

        async loadAddressList() {
            this.addressList = await accountService.getAddressList();
        },

        addAddress(data) {
            this.$refs.addAddressModal.show();
        },

        editAddress(id) {
            this.$refs.editAddressModal.show(id);
        },

        async deleteAddress(id) {
            await accountService.deleteAddress(id);

            this.loadAddressList(); //need to change

            this.$root.successToast('Address deleted');
        },

        addressAdded() {
            this.loadAddressList(); //need to change

            this.$root.successToast('Address added');
        },

        addressEdited() {
            this.loadAddressList(); //need to change

            this.$root.successToast('Address edited');
        }
    }
}
</script>

所以我需要更改 loadAddressList() 因为它在添加/编辑/删除后再次重新加载所有地址数据。什么是最好的解决方案?

凯勒韦尔斯比

我之前就遇到过这个问题。这与反应性以及更改可能会延迟一个刻度有关。

您的问题的示例解决方案。

methods: {
  async loadAddressList() {
    this.addressList = await accountService.getAddressList();
    await this.$nextTick() // waits for the next event tick before completeing function.
  },
}

看看Async update Queue

此外,看看数组更改检测替换数组做了一些有效的操作工作来重用 DOM 元素。

祝你好运。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使用 vue.js 和 bootstrap 显示所有数组

来自分类Dev

更新 vue js 值

来自分类Dev

Vue Js:传递数据

来自分类Dev

Vue.js动态组件重新加载

来自分类Dev

在Vue.js中,更改数据数组中所有项目的特定属性的值

来自分类Dev

Vue.js v-如果不重新渲染

来自分类Dev

文件状态更改时Vue.js不重新呈现

来自分类Dev

在Vue组件之前加载js

来自分类Dev

在Vue组件之前加载js

来自分类Dev

Vue.js:如何更新对象数组?

来自分类Dev

Vue Js 中的数据/模型更新延迟

来自分类Dev

Vue JS无法显示数据

来自分类Dev

重新加载 vue.js 单个应用程序时,我有错误看到 vue.js 代码

来自分类Dev

vue.js使用计时器自动重新加载/刷新数据

来自分类Dev

在更改Vue.Js + HTML Range上重新加载画布

来自分类常见问题

vue js在“ POST” /“ DELETE” /“ PUT”请求后自动更新数据| Vue JS 2

来自分类Dev

Vue.js 重新渲染静态内容

来自分类Dev

在vue.js中加载选择

来自分类Dev

Vue.js无法加载SVG图像?

来自分类Dev

从API在vue.js中加载图像

来自分类Dev

Vue JS项目未加载.env变量

来自分类Dev

图片未在Vue JS中加载

来自分类Dev

日期未正确加载vue.js

来自分类Dev

Vue.js - 从 ajax 调用加载组件

来自分类Dev

谷歌地图无法正确加载 vue js

来自分类Dev

Vue js Highmaps - 如何加载地图?

来自分类Dev

Vue.js 3,vue-router,@ click事件会重新加载整个页面

来自分类Dev

如何知道何时将所有子组件加载到vue.js中

来自分类Dev

如何从 vue 响应中获取所有数组值