Yêu cầu thg 10 5, 2020 10:22 SA 167 0 2
  • 167 0 2
+1

Giải thích giúp e với! Thắc mắc về chức năng show modal của bootstrap trong vueJS

Chia sẻ
  • 167 0 2

Chào mọi người.
Mình đang học VueJS và có thắc mắc sau mong mọi người giải đáp.
Mình có 1 danh sách list, và một form insert new (dạng modal popup).
Và vấn đề em muốn hỏi đang ở phần show modal. (e có sử dụng bootstrap ah).
Các bước em đang xử lý như sau ạ.

  1. Click button New sẽ hiển thị form insert.
  2. Nhập thông tin vào form, nhấn submit. modal sẽ ẩn đi và hiển thị loading ($('#id').modal('hide'));
  3. Server validate và trả lỗi về nếu có.
  4. Client nhận errors từ server, hiển thị lên modal. và gọi modal('show'), để show lại modal.

Lỗi của em đang gặp là ở dưới local, nó hoặt động ok.
Nhưng khi em triển khai trên server. thì gặp lỗi ở bước 4. sau khi modal đc show lên nó ngay lập tức bị ẩn đi. Mà em chưa hiểu lý do. Mong anh chị giải đáp.

$('#insertForm').modal('hide');
axios
        .post(url, data)
        .then((res) => {
            let data = res.data;
            if (data.status) {
                notify.success(data.message);
                this.form.reset();
                this.$emit('changeDetailList', data.data);
            } else {
                notify.error(data.message);
            }
        })
        .catch((err) => {
            this.form.errors.record(err.response.data.errors);
            $('#insertForm').modal('show');
        })
        .finally(() => {
            this.busy = false;
            common.hideLoading();
        });

P/s: em đã dùng 1 cách khác và xử lý đc rồi, nhưng vẫn còn lăn tăn về vấn đề em gặp trên server. mong anh chị giải đáp ạ.

Avatar Vũ Thành Long @longvt1912
thg 10 6, 2020 8:00 SA

Bạn up đủ file vue này được không?. Thấy Axios global trông không hiểu lắm.

Avatar Ngân Kim @ngankim
thg 10 7, 2020 10:49 SA

@longvt1912 axios global ko hiểu là thế nào bạn?
import nó vào thôi mà

Avatar Vũ Thành Long @longvt1912
thg 10 8, 2020 12:42 SA

Phần code này thiếu bước 1: Click và hiển thị form như bạn mô tả ấy.

Avatar morikun @thanhnguyen
thg 10 8, 2020 1:14 SA

@longvt1912 Bác chưa hiểu câu hòi thì phải.
Bạn ấy nói là nó đã chạy ổn định ở local.
Nhưng trên server nó ko show modal khi catch error.
Câu hỏi của bạn ấy là ở bước 4, khi gọi modal('show') mà nó chưa show, tại sao? (dưới local thì show mà trên server thì ko show đc.)

.catch((err) => {
            this.form.errors.record(err.response.data.errors);
            $('#insertForm').modal('show');
 })
Avatar Vũ Thành Long @longvt1912
thg 10 8, 2020 1:33 SA

@thanhnguyen mình thấy đoạn đó rất ổn nên nghĩ lỗi phát sinh từ phía trên những đoạn code này và ảnh hưởng đến this.busy, common ở finally.

2 CÂU TRẢ LỜI


Đã trả lời thg 10 8, 2020 1:28 SA
0

Không có đoạn code hoàn chỉnh nên mình đoán vấn đề ở chỗ finally. Do môi trường khác nhau nên phần này có thể không được hỗ trợ. Trong đó lại có

this.busy = false;
common.hideLoading();

Có thể nó ảnh hưởng đến modal không ? Tham khảo Doc từ Mozilla:

The axios docs mention it: Axios depends on a native ES6 Promise implementation to be supported.

Chia sẻ
Avatar Fenomeno @phanvantan
thg 10 12, 2020 8:58 SA
Đã trả lời thg 10 15, 2020 9:20 SA
0

khi có lỗi nó nhảy vào catch => show modal => finish => hide modal, nên sẽ có hiện tương show lên rồi ngay lập tức bị ẩn đi. E sửa lại như ri sẽ ok hơn :

  1. Click button New sẽ hiển thị form insert.
  2. Nhập thông tin vào form, nhấn submit, hiển thị loading;
  3. Nếu có lỗi hiện thị trên modal, không có ẩn modal đi.
Chia sẻ
Viblo
Hãy đăng ký một tài khoản Viblo để nhận được nhiều bài viết thú vị hơn.
Đăng kí