nickola105
@nickola105
начинающий

Как в модальное окно вставлять нужный компонент во Vue?

Всем привет!
Есть вот такой компонент модального окна
<template lang="pug">
  div(class="modal__wrap" :class="[selectedComponent ? 'visible' : false]" @click="selectedComponent = ''")
    div(class="modal")
      div(class="modal__close" @click="selectedComponent = ''")
      div {{ selectedComponent }}
      component(:is="selectedComponent")
</template>

<script>
import { eventBus } from '@/main'
import WhoAreYou from './WhoAreYou.vue'
import SearchingControl from './SearchingControl.vue'
export default {
  data () {
    return {
      isShow: false,
      selectedComponent: ''
    }
  },
  components: {
    WhoAreYou,
    SearchingControl
  },
  created () {
    eventBus.$on('ShowComponent', (component) => {
      // this.isShow = val
      this.selectedComponent = component
    })
  }
}
</script>

есть вот такой компонент кастомного "инпута"
<template lang="pug">
  app-modal  
    ul.signup-control
      li
        div(id="male" class="radio" @click="chooseGender('Мужчина')" :class="[value==='Мужчина' ? 'active' : false]") 
        span Мужчина
      li
        div(id="female" class="radio" @click="chooseGender('Женщина')" :class="[value==='Женщина' ? 'active' : false]")
        span Женщина
</template>

<script>
import Modal from './Modal.vue'

export default {
  props: ['value'],
  components: {
    appModal: Modal
  },
  methods: {
    chooseGender (gender) {
      this.$emit('input', gender)
    }
  }
}
</script>

в родительском компоненте я слежу за состояние кастомного инпута
form.sign-up__form
        div.sign-up__form-field
          label(class="sign-up__label" @click.prevent="passControl('WhoAreYou')") {{ gender }}
          who-are-you(v-model="gender")
import { eventBus } from '@/main'
import WhoAreYou from '../components/WhoAreYou.vue'
import SearchingControl from '../components/SearchingControl.vue'
import Modal from '../components/Modal.vue'
export default {
  data () {
    return {
      gender: 'Я',
      iSearch: 'Ищу',
      selectedControl: 'WhoAreYou'
    }
  },
  components: {
    WhoAreYou,
    appModal: Modal,
    SearchingControl
  },
  methods: {
    passControl (control) {
      eventBus.$emit('ShowComponent', control)
      // this.selectedControl = control
    },
    openControl () {
      eventBus.$emit('ShowControl', true)
    }
  }
}
</script>

Вопрос в том как мне передать в модальное окно, нужный компонент, при этом чтоб в родительском я знал что выбрали?
При той реализации что сейчас модальное окно пустое. вместо него текст ()
хотя видно что название компонента передается
  • Вопрос задан
  • 1236 просмотров
Решения вопроса 1
kulakoff
@kulakoff Куратор тега Vue.js
Vue.js developing
Может я не все понял, но какое-то странное использование...
Не проще вставить в шаблон модального окна слот и передавать туда нужный контент:
<template> // modal template
<div>
<slot></slot>
</div>
</template>


В родителе:
<template>
<modal>
  <custom-input></custom-input>
</modal>
</template>
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
boratsagdiev
@boratsagdiev
А как вы следите за состоянием инпута? Он у вас создаёт событие 'input', но в родителе вы нигде его не ловите (eventBus.$on('input', ...), либо я что-то упускаю с телефона.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы