Vueの任意のスロットへのアクセス

dmcblue

'Tab'Uiのように再利用するための多層コンポーネントを作成したいとします

したがって、使用している開発者は次のように書くことができます。

<tabs>
  <tab label="My First Tab">
    Content for first tab which could contain components, html, etc.
  </tab>
  <tab label="My Second Tab">
    More Content
  </tab>
</tabs>

基本的に、彼らはタブとタブコンポーネントを使用するので、開発者がタブで使用するタブコンポーネントの数がわかりません。タブコンポーネントにアクセスして、たとえば、タブUI機能ごとに表示および非表示にするにはどうすればよいですか?

使用this.$childrenてみましthis.slots.defaultたが、実際にはタブデータにアクセスして表示および非表示にすることができませんでした。公平を期すために、私はTypescriptで書いていますが、そのため問題はもっと難しいかもしれません。

何かのようなもの:

<template>
    <div class="tabs">
        <slot /> <!-- Location of the Tab's -->
    </div>
</template>

<script lang="ts">
import { Component, Vue } from "vue-property-decorator";

@Component({
    ...
})
export default class Tabs extends Vue {
    public tabs: any[] = [];
        
    public created() {
        this.tabs = this.$slots.default;
        // this.tabs is a set of VNode's, 
        //    I can't figure out how to access the components
        //    I see a prop 'componentInstance' but when I try to
        //    access it, it says undefined
        // this.select(0);
        let tab = this.tabs.find((obj: any, index: number) => {
            return index === 0;
        }); // tab is undefined :(
    }

    public select(index: number) {
        (this.$slots.default[index] as any).show = true;
        // Accessing Vnode instead of Component :(
        // this.$children[0]["show"] = true; // Read only :(
        // this.tabs[index].show = true; // blerrggg :(

        // Vue.nextTick();
    }
}
</script>

Vueのタブ用のGitHubライブラリをいくつか見てきましたが、ロジックは非常に複雑なようです。スロット/子の存在から、子コンポーネントにアクセスするためのより簡単なアプローチがあると思います。多分それは私の側では過度に希望的です。

子スロットにいくつの子があるかわからない場合(つまり、親コンポーネントに明示的に書き込んでいない場合)、子スロットのデータにアクセス、受け渡し、または変更する方法を知っている人はいますか?

トムハ

タブコンポーネントがマウントされるまで待たなければならないという問題がある場合、マウントされたライフサイクルフックはこの種のもののために存在します。$childrenただし、Vueのドキュメントで概説されているようにプロパティの使用には潜在的な問題があります

$ childrenの注文保証はなく、反応的ではないことに注意してください。データバインディングに$ childrenを使用しようとしていることに気付いた場合は、配列とv-forを使用して子コンポーネントを生成し、その配列を信頼できる情報源として使用することを検討してください。

注文は保証されていないので、this.$children[index]あなたが期待するタブを与えることは保証されていません。

v-forと配列を使用して提案されたアプローチを使用すると、次のようになります。

<template>
    <div class="tabs">
        <tab v-for="(tabName, index) in tabs" :key="tabName" :label="tabName" :ref="`tab-${index}`">
            <slot :name="tabName"></slot>
        </tab>
    </div>
</template>

<script lang="ts">
import { Component, Prop, Vue } from "vue-property-decorator";

@Component({
    ...
})
export default class Tabs extends Vue {
    @Prop(Array) tabs: string[];

    public mounted() {
        this.select(0);
    }

    public select(index: number) {
        this.$refs[`tab-${index}`].show = true;
    }
}
</script>

スロットをタブ内に配置して、すべての子コンポーネントがタブコンポーネントにラップされることを確認します。つまり、すべてのtabs子がtabコンポーネントであることが保証され、すべての子が$refs期待されるtabプロパティを持ちます。あなたはこのようにこれを使うでしょう:

<tabs :tabs="['My First Tab', 'My Second Tab']">
    <template slot="My First Tab">
        Content for first tab which could contain components, html, etc.
    </template>
    <template slot="My Second Tab">
        More content
    </template>
</tabs>

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

wilcox_testの結果のスロットへのアクセス

分類Dev

マップ内のセットの値へのアクセス

分類Dev

XcodeLLVMプロセッサマクロへのアクセス

分類Dev

Rubyブロックのメソッドへのアクセス

分類Dev

ロックなしの変数への同時アクセス

分類Dev

Androidの別のスレッドからのレトロフィットとレルムへのアクセス

分類Dev

ブロック内のブロックのC配列へのアクセス

分類Dev

STL「セット」の要素への直接アクセス

分類Dev

単一のデータセットへのアクセス

分類Dev

Jsonからのデータセットへのアクセス

分類Dev

セット内のデータへのアクセス

分類Dev

セット内のデータへのアクセス

分類Dev

リモートデスクトップへのアクセス

分類Dev

リスト内のマトリックスの要素へのアクセス

分類Dev

複数のFirebaseプロジェクトへのアクセス

分類Dev

起動とシャットダウンのログへのアクセス

分類Dev

迅速なプロトコルメソッドの変数へのアクセス

分類Dev

アセットカタログ内の特定の解像度の画像へのアクセス

分類Dev

Azure Mobile ServiceAPIへのMicrosoftAccountアクセス用のデスクトップクライアントフロー

分類Dev

VUE2 +子メソッドへのアクセス

分類Dev

ドロップダウンリストへのアクセス-Seleniumwebdriver&java

分類Dev

openCVのマットの要素へのアクセス

分類Dev

リスト名へのアクセス

分類Dev

別のプロセッサのローカルAPICへのアクセス

分類Dev

コントローラーのangularjsテキストボックス値へのアクセス

分類Dev

リクエストヘッダーへのアクセス

分類Dev

IOS:ローカルネットワークへのアクセス

分類Dev

ローカルネットワークからVirtualHostsへのアクセス

分類Dev

プロトタイプの親へのアクセス

Related 関連記事

  1. 1

    wilcox_testの結果のスロットへのアクセス

  2. 2

    マップ内のセットの値へのアクセス

  3. 3

    XcodeLLVMプロセッサマクロへのアクセス

  4. 4

    Rubyブロックのメソッドへのアクセス

  5. 5

    ロックなしの変数への同時アクセス

  6. 6

    Androidの別のスレッドからのレトロフィットとレルムへのアクセス

  7. 7

    ブロック内のブロックのC配列へのアクセス

  8. 8

    STL「セット」の要素への直接アクセス

  9. 9

    単一のデータセットへのアクセス

  10. 10

    Jsonからのデータセットへのアクセス

  11. 11

    セット内のデータへのアクセス

  12. 12

    セット内のデータへのアクセス

  13. 13

    リモートデスクトップへのアクセス

  14. 14

    リスト内のマトリックスの要素へのアクセス

  15. 15

    複数のFirebaseプロジェクトへのアクセス

  16. 16

    起動とシャットダウンのログへのアクセス

  17. 17

    迅速なプロトコルメソッドの変数へのアクセス

  18. 18

    アセットカタログ内の特定の解像度の画像へのアクセス

  19. 19

    Azure Mobile ServiceAPIへのMicrosoftAccountアクセス用のデスクトップクライアントフロー

  20. 20

    VUE2 +子メソッドへのアクセス

  21. 21

    ドロップダウンリストへのアクセス-Seleniumwebdriver&java

  22. 22

    openCVのマットの要素へのアクセス

  23. 23

    リスト名へのアクセス

  24. 24

    別のプロセッサのローカルAPICへのアクセス

  25. 25

    コントローラーのangularjsテキストボックス値へのアクセス

  26. 26

    リクエストヘッダーへのアクセス

  27. 27

    IOS:ローカルネットワークへのアクセス

  28. 28

    ローカルネットワークからVirtualHostsへのアクセス

  29. 29

    プロトタイプの親へのアクセス

ホットタグ

アーカイブ