Можете ли вы помочь мне понять, что происходит, когда я пытаюсь использовать v-if и props?
Я создал модальный компонент, и внутри этого модального компонента у меня есть несколько модальных окон, и я использую Zurb Foundation Reveal, чтобы показать свое модальное окно. Я использую директиву v-if для отображения нужного мне модального окна.
Вот мой код:
Модальный компонент
<template>
<div>
<div v-if = "type === 'loading'" id = "modal-1"></div>
<div v-if = "type === 'success'" id = "modal-1"></div>
<div v-if = "type === 'error'" id = "modal-1"></div>
</div>
</template>
<script lang = "ts">
import { Component, Prop, Vue } from "vue-property-decorator"
export default class MyModal extends Vue {
@Prop(string) type
}
Родительский компонент
<template>
<div>
<my-modal :type = "type"></my-modal>
<button @click = "myMethod()">Click Me</button>
</div>
</template>
<script lang = "ts">
import { Component, Vue } from "vue-property-decorator"
import MyModal from "../my-modal.vue"
@Component({
components: { MyModal }
})
export default class ParentComponent extends Vue {
type: string = ""
myMethod() {
let modal = new Foundation.Reveal($("#modal-1"))
this.type = "loading"
modal.open()
}
}
</script>
измените type в родительском компоненте на вычисляемое свойство, чтобы оно было реактивным, а изменения в родительском type повлияли на дочернюю опору.
@ChrisDixon uhmmm type будет установлен после того, как я нажму, потому что я хочу показать модальный, который я хочу, поэтому он должен быть установлен при щелчке. или есть другой способ сделать это?
@AgentDroid просто попробуйте поставить this.type = "loading" перед строкой "let modal ..". Это работает? Первая задача - получить модальную инициализацию.
@ChrisDixon Я пробовал, но он возвращает эту ошибку DOMException: Failed to execute 'insertBefore' on 'Node': The node before which the new node is to be inserted is not a child of this node.
@Efrat, как установить с помощью вычисленных?



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Попробуйте установить модальный тип и дождитесь следующего тика, чтобы модель DOM обновилась и ею можно было управлять с помощью этого плагина.
myMethod() {
this.type = "loading"
this.$nextTick().then(_ => {
let modal = new Foundation.Reveal($("#modal-1"))
modal.open()
})
}
Вы пытаетесь инициализировать модальное окно до того, как будет установлен «тип», поэтому на странице нет элемента для инициализации, следовательно, нет модального окна для фактического открытия. Задайте тип, затем инициализируйте модальное окно.