再帰コンポーネントを使用して Vue で動的レイアウトを生成する

Susan Sarandon
リリース: 2024-10-05 06:20:02
オリジナル
127 人が閲覧しました

この記事のインスピレーションは、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 中国語 Web サイトの他の関連記事を参照してください。

ソース:dev.to
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!