> 웹 프론트엔드 > JS 튜토리얼 > 재귀 구성 요소를 사용하여 Vue에서 동적 레이아웃 생성

재귀 구성 요소를 사용하여 Vue에서 동적 레이아웃 생성

Susan Sarandon
풀어 주다: 2024-10-05 06:20:02
원래의
271명이 탐색했습니다.

이 기사의 영감은 Vue 기반 프런트엔드에서 동적 레이아웃을 구축하기 위해 수행한 최근 구현에서 비롯되었습니다.

API 엔드포인트가 아래와 같은 YAML 레이아웃을 반환한다고 가정해 보겠습니다.


---
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


로그인 후 복사

이 YAML 표현식에서 아래와 같은 레이아웃을 예상할 수 있습니다.

Generating dynamic layouts in Vue using recursive components

이 작업을 쉽게 수행할 수 있도록 이 YAML 구조를 구문 분석하고 JSON 개체를 생성하겠습니다. yaml 패키지를 사용했습니다.


npm install yaml



로그인 후 복사

그런 다음 이를 가져와서 파서를 실행할 수 있습니다.


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


로그인 후 복사

이 작업을 수행하려면 재귀적 Vue 템플릿과 중첩된 행이 발견될 때 재귀적으로 호출할 수 있는 구성 요소를 만들어야 합니다. 이런 식으로 구조는 내가 제공한 것과 같이 깊게 중첩된 레이아웃을 동적으로 처리합니다.


<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>


로그인 후 복사

이제 상위 구성 요소 내에서 이 RecursiveRow 구성 요소를 사용하여 최상위 레이아웃을 처리할 수 있습니다.


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

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

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


로그인 후 복사

그렇습니다. 궁금하신 점은 아래 댓글로 남겨주세요.

위 내용은 재귀 구성 요소를 사용하여 Vue에서 동적 레이아웃 생성의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:dev.to
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿