Новая строка dataTables не будет добавлена ​​в таблицу - PullRequest
0 голосов
/ 14 января 2020

Когда я добавляю новые данные, они не добавляются в таблицу

one

Код

HTML

<thead>
        <tr>
            <th class="text-center">ID</th>
            <th class="text-center">Number</th>
            <th class="text-center">Body</th>
            <th class="text-center">Heading</th>
            <th class="text-center">Book</th>
            <th class="text-center">Chapter</th>
            <th class="text-center">Actions</th>
        </tr>
    </thead>
    <tbody>
        <template v-for="verse in getVerses">
            <tr v-bind:key="verse.id">
                <td width="30" class="text-center">{{ verse.id }}</td>
                <td class="text-center">{{ verse.number }}</td>
                <td>{{ verse.body }}</td>
                <td>{{ verse.heading }}</td>
                <td class="text-center">{{ verse.book.name }}</td>
                <td class="text-center">{{ verse.chapter.name }}</td>
                <td class="text-center">
                    <button class="btn btn-sm btn-danger" type="button" @click="deleteVerse(verse.id)">Delete</button>
                </td>
            </tr>
        </template>
    </tbody>
</table>

Script

export default {
    name: "adminVerses",
    data() {
        return {
            isLoading: true,
            type: '',
            books: [],
            errors: [],
            pageTitle: 'Manage Verses',
            getChapters: [],
            getVerses: [],
            isLoadingChapters: true,
            isLoadingVerses: true,
            verse: {
                number: 1,
                heading: '',
                body: '',
                book_id: '',
                chapter_id: '',
            }
        }
    },
    methods: {
        submit: function(e) {
            axios.post('/api/saveVerse', this.verse)
            .then(res => {
                this.isLoading = false;
                $('#exampleModal').modal('toggle');
                this.getVerses.push( res.data.verse );
                this.verse = {
                    number: parseInt(this.verse.number) + 1,
                    heading: '',
                    body: '',
                    book_id: this.verse.book_id,
                    chapter_id: this.verse.chapter_id,
                };
            })
            .catch(error => {
                // handle authentication and validation errors here
                this.errors = error.response.data.errors
                this.isLoading = false
            })
        },
    }
}

Есть идеи?

Обновить

, добавив

if ($.fn.dataTable.isDataTable('#verses')) {
  $('#verses').DataTable().clear().destroy(); //This will destroy datatable               
};

this.getVerses.push( res.data.verse );

теперь я могу добавить свои недавно добавленные данные в свою таблицу, но я также потеряю способность разбивать на страницы и искать, и т. д. c.

идеи?

Ответы [ 3 ]

0 голосов
/ 14 января 2020

откройте vue devtools и проверьте, получает ли getVerses правильные данные

0 голосов
/ 14 января 2020

Pu sh в массиве не отвечает, поэтому vue не знает, что ему нужно обновить представление. Установщик массива отзывчив, поэтому:

this.getVerses = this.getVerses.concat(res.data.verse)

сделает свое дело.

0 голосов
/ 14 января 2020

Вы используете это для ссылки на объект, поэтому вы ограничены областью действия Ax ios. Вместо этого вы можете использовать переменную для хранения ссылки на главный объект, в вашем случае adminVerses, а затем использовать $ data для установки или извлечения атрибутов данных.

Пример:

    let vm = this;
axios({
                ...
            }).then((res) => {

                vm.$data.getVerses.push( res.data.verse );
            });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...