Heim > Web-Frontend > js-Tutorial > Generieren dynamischer Layouts in Vue mithilfe rekursiver Komponenten

Generieren dynamischer Layouts in Vue mithilfe rekursiver Komponenten

Susan Sarandon
Freigeben: 2024-10-05 06:20:02
Original
287 Leute haben es durchsucht

Die Inspiration für diesen Artikel stammt von einer kürzlich durchgeführten Implementierung, mit der ich dynamische Layouts auf einem Vue-basierten Frontend erstellt habe.

Angenommen, Ihr API-Endpunkt gibt ein YAML-Layout wie unten zurück.


---
row:
  - col: 12
    row:
      - col: 12
        component_id: 1
  - col: 12
    row:
      - col: 6
        component_id: 2
      - col: 6
        row:
          - col: 12
            component_id: 3
          - col: 12
            component_id: 4


Nach dem Login kopieren

Wir würden von diesem YAML-Ausdruck ein Layout wie das folgende erwarten.

Generating dynamic layouts in Vue using recursive components

Um die Arbeit damit zu vereinfachen, analysieren wir diese YAML-Struktur und generieren ein JSON-Objekt. Ich habe das Yaml-Paket verwendet.


npm install yaml



Nach dem Login kopieren

Dann könnten wir es importieren und den Parser ausführen.


import YAML from 'yaml'
const jsonObject = YAML.parse(yaml_struct)


Nach dem Login kopieren

Damit dies funktioniert, müssen wir eine rekursive Vue-Vorlage und eine Komponente erstellen, die sich selbst rekursiv aufrufen kann, wenn sie auf verschachtelte Zeilen stößt. Auf diese Weise verarbeitet die Struktur dynamisch tief verschachtelte Layouts wie das von mir bereitgestellte.


<template>
    <v-row>
        <template v-for="col in row">
            <v-col :cols="col.col">
                <template v-if="col.component_id">
                    <ComponentWantToRender :col="col"></ComponentWantToRender>
                </template>

                <template v-if="col.row">
                    <RecursiveRow :row="col.row"></RecursiveRow>
                </template>
            </v-col>
        </template>
    </v-row>
</template>

<script setup>
import { defineProps } from 'vue';
import RecursiveRow from './RecursiveRow.vue';
defineProps({
    row: Array,
});
</script>


Nach dem Login kopieren

Jetzt können wir diese RecursiveRow-Komponente in Ihrer übergeordneten Komponente verwenden, um das Layout der obersten Ebene zu verwalten.


<template>
  <RecursiveRow :row="jsonObject"></RecursiveRow>
</template>

<script setup>
import RecursiveRow from './RecursiveRow.vue';

defineProps({
  jsonObject: Array,
});
</script>


Nach dem Login kopieren

Das ist es. Wenn Sie Fragen haben, hinterlassen Sie bitte unten einen Kommentar.

Das obige ist der detaillierte Inhalt vonGenerieren dynamischer Layouts in Vue mithilfe rekursiver Komponenten. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:dev.to
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage