Ich verwende den Single-File-Komponenten-Ansatz mit Vue 2.0. Ich habe 3 Komponenten App
(Eltern), AppHeader
und FormModal
. AppHeader
und FormModal
sind unmittelbare Kinder von App
und Geschwister von einander.Was ist der richtige Weg, um Werte von einer importierten Geschwisterkomponente in Vue.js 2.0 zu mutieren?
Das Ziel ist es, dass, wenn eine Schaltfläche in AppHeader
geklickt wird die FormModal
Sichtbarkeit umgeschaltet werden soll. Das Problem, das ich habe, ist das Verständnis des unidirektionalen Datenflusses von Vue. Wie kann ich ein Ereignis an das übergeordnete Element (App
) von AppHeader
zurückgeben, um die Sichtbarkeit des Formulars zu ändern?
(AppHeader.vue)
<template>
<header>
<div class="app-header">
<h1 class="app-title">Sample Header</h1>
<a class="link-right" v-on:click="toggleModal()" href="#">
<i class="fa fa-pencil-square-o"></i>
</a>
</div>
</header>
</template>
<script>
import FormModal from "./FormModal.vue";
export default {
name : "AppHeader",
props : ['visible'],
methods : {
toggleModal() {
this.visible = !this.visible;
}
},
components : {
FormModal
}
}
</script>
(FormModal.vue)
<template>
<div class = "form-content" v-if="visible">
<!-- Some form markup -->
</div>
</template>
<script>
export default {
name : "FormModal",
props : ['visible']
//Also have data, methods, and computed here, but they aren't relevant to the example.
}
</script>
Ich habe sicherlich das Konzept der Requisiten in diesem Beispiel verpfuscht. Ich bin sehr verwirrt über die korrekte Verwendung von Requisiten beim Importieren einer Vorlage.
Edit:
Verzeihen Sie mir, dies ist mein erster Tag mit Vue arbeiten. Ich habe anfangs eine sehr wichtige Information weggelassen, meine App.vue
Datei, die das übergeordnete Element aller meiner Vorlagen ist.
(App.vue)
<template>
<div class="app">
<AppHeader></AppHeader>
<FormModal></FormModal>
</div>
</template>
<script>
import AppHeader from "./AppHeader.vue";
import Compose from "./FormModal.vue";
export default {
data() {
return {
views : [AppHeader, FormModal]
}
},
components : {
AppHeader,
FormModal
}
}
</script>
Zusammengefasst ist App die Eltern. Es gibt 2 Geschwister, AppHeader
und FormModal
. Wenn in AppHeader
, FormModal
eine Schaltfläche geklickt wird, sollte die Sichtbarkeit umgeschaltet werden.
Ich habe Vue's unidirektionalen Datenfluss noch nicht gut verstanden und bin mir nicht sicher, wie ich dieses Szenario angehen soll.
Ihre Frage scheint unvollständig. Wo rendern Sie eigentlich die modale Komponente? –
Sie haben Recht, David und ich haben es gerade gemerkt - ich werde den entsprechenden Schnitt vornehmen. – Robert
@DavidL Ich habe gerade den Post bearbeitet, um das komplette Bild zu zeigen. Guter Fang. – Robert