Vue 3 でスロットの内容を確実に処理する方法はありませんか?
P粉714844743
P粉714844743 2023-08-30 08:47:17
0
2
354

現在、Vue 2 コードベースを Vue 3 に移行中です。

 <テンプレート #デフォルト> <カードヘッダー> ヘッダー 
      <カード本体 v-for="「f" in bodycount」 :key=""'f'" b"" 本文 {{ b }} < カード本体> <カードフッター footercount」 f"" フッター f }}< text> カードフッター> テンプレート> card>< pre> 

card コンポーネントには、this.$slots.default()< code> を呼び出すレンダリング関数があります。ただし、vue 3 では、vue 2 とは異なるコンテンツが返されます。したがって、 console.log(this.$slots.default())< を実行すると、3 つの要素を含む配列が得られます [v ノードのタイプ "header"、タイプ これは v ノードですsymbol(fragment)、タイプ symbol(fragment) の ノード]< p>

より具体的には、カード フッター/カード本体をコンポーネントとして認識せず、代わりにタイプのシンボル (フラグメント) が表示されます。 Card-header は v-for ループ内にないため、実際には問題ありません。

カード コンポーネントのレンダリング関数内には、テキスト/フッター コンポーネントがいくつあるかを知る必要があるロジックがあります。したがって、コンポーネントの種類を伝えることができる必要があります。 Vue3では無理なのでしょうか?これはここの v-for と関係があると推測できますが、実際に最終的な v-node を取得する方法がわかりません。この例では、配列に 3 つの要素ではなく、カード ヘッダー、すべてのカード本体、すべてのカード フッターが含まれるようにします。

P粉714844743
P粉714844743

全員に返信 (2)
P粉865900994

カード コンポーネントのデザインは私には意味がありません。再考することをお勧めします。

これはシンプルなプレイグラウンド レンダリング スロットです

リーリー リーリー リーリー

警告に注意してください。 Vue はcard-headerを解析できないため、ここではレンダリングしません。

リーリー

データにアクセスできる場合、slotsアクションcard-body/card-footerアイテムをbodyCount 経由で直接渡すのはなぜですか??

それが私にとって合理的ではないと思われる場合。

リーリー リーリー リーリー
いいねを押す+0
    P粉440453689

    結局のところ、フラグメントは配列の各要素の Children プロパティを介して展開できることがわかりました。したがって、この場合、v-for はフラグメントである v ノードを生成しますが、Children プロパティを調べることでさらに多くのことを推測できます。

    いいねを押す+0
      最新のダウンロード
      詳細>
      ウェブエフェクト
      公式サイト
      サイト素材
      フロントエンドテンプレート
      私たちについて 免責事項 Sitemap
      PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!