Modal ls не срабатывает с V-Show

У меня есть модальное окно, которое импортируется и добавляется на страницу в качестве компонента. Модальное окно вызывается на странице как

 <TwoFactorStatus v-show = "showTwoFactoreModal"></TwoFactorStatus>

Тогда у кнопки есть событие нажатия как таковое.

 <button class = "btn btn-danger pull-right" @click = "ShowTwoFactoreModal()" type = "danger">Disable two-factor authentication</button>

Которая затем вызывает метод для

ShowTwoFactoreModal() {
      this.showTwoFactoreModal = true;
    }

Модальное окно выглядит так

<template>
<div class = "modal fade" id = "showTwoFactoreModal" data-keyboard = "false" data-backdrop = "static" role = "dialog">
    <div class = "modal-dialog" role = "document">
        <div class = "modal-content">
            <div class = "modal-header text-center">
                Two Factor Switch Off
            </div>
            <div class = "modal-body">
            <p>This modal must pass</p>
            </div>
        </div>
    </div>
</div>
</template>

вы используете bootstrap я предполагаю?

Erubiel 24.10.2018 12:02

Да, используя бутстрап

GrahamMorbyDev 24.10.2018 12:03

попробуйте переключить затухание класса, а не использовать v-show

Kevin Batongbakal 24.10.2018 12:03
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
3
116
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Измените функцию ShowTwoFactoreModal на что-то вроде этого:

ShowTwoFactoreModal() {
    this.showTwoFactoreModal = true;
    $('#showTwoFactoreModal').modal('show');
}

Либо так, либо, возможно, используя привязки: class и добавив активный класс, но это более прямолинейно. Обычно я делаю это с помощью eventBus, но это может быть излишним для вашего проекта ... если бы вы делали это с помощью шины событий, вы могли бы прикрепить eventListener к модальному компоненту и прикрепить обратный вызов функции showModal к этому слушателю, где вам не нужно устанавливать идентификаторы, вы можете просто назвать это как: $(this.$el).modal('show'); ... но это уже другая история ...

Странно то, что я делал модальные окна в других местах на сайте точно так же, как и выше, и никогда не нуждался в этом бите $ ('# showTwoFactoreModal'). Modal ('show'); Но работает отлично! Спасибо

GrahamMorbyDev 24.10.2018 12:17

Возможно, я ошибаюсь, но это, вероятно, проблема с CSS-классами, у вас, вероятно, есть необходимые классы в других модальных окнах и теле, и вы просто скрываете их с помощью v-show, проверьте это, сделайте это и другие модальные окна покажут без v-show, если другие модальные окна показывают, что это, вероятно, так

Erubiel 24.10.2018 12:22

Я посмотрю и посмотрю, в чем разница, но спасибо, теперь он работает отлично!

GrahamMorbyDev 24.10.2018 12:28

Модальное окно Bootstrap использует свои собственные js-функции для обработки модального отображения и скрытия. Vue v-show может показывать и скрывать только те компоненты, логику которых вы запрограммировали. Но модальное окно начальной загрузки отображается и скрывается за счет добавления класса к модальному компоненту. Если вы хотите использовать bootstrap.js без переключения, вы можете использовать jQuery с Vue, как показано ниже. (если просто хотите показать, измените метод .show ())

//200 is duration of fade animation.
<button @click = "toggleModal"></button>

function toggleModal() {
    $('#your_modal_id').fadeToggle(200)
}

Если вы хотите использовать собственный модальный загрузчик со своими js, вы можете скопировать и вставить модальный код здесь. https://getbootstrap.com/docs/4.0/components/modal/

Если вы хотите, чтобы Vue v-show обрабатывал весь процесс, напишите логику для этого. Если нужна помощь, просто спросите.

Другие вопросы по теме