ホームページ  >  記事  >  ウェブフロントエンド  >  Vue.js 動的コンポーネント テンプレートの詳細な紹介 (コード例)

Vue.js 動的コンポーネント テンプレートの詳細な紹介 (コード例)

不言
不言転載
2018-11-26 14:27:532354ブラウズ

この記事では、Vue.js 動的コンポーネント テンプレートについて詳しく説明します (コード例)。必要な方は参考にしていただければ幸いです。

コンポーネントは常に同じ構造を持つとは限りません。場合によっては、管理する必要があるさまざまな状態が多数存在します。これを非同期で行うと便利です。

例:

コンポーネント テンプレートは、通知、コメント、添付ファイルなど、一部の Web ページの複数の場所で使用されます。一緒にコメントを見て、私の言いたいことを見てみましょう。
コメントは単なるテキストフィールドではなくなりました。リンクの投稿、画像のアップロード、ビデオの統合などをできるようにしたいと考えています。これらすべての異なる要素がこの注釈に存在する必要があります。これをコンポーネント内で実行しようとすると、すぐに非常に混乱する可能性があります。

対処方法

この問題はどのように対処すればよいでしょうか?おそらくほとんどの人は、最初にすべてのケースを確認してから、特定のコンポーネントをロードします。次のようなもの:

<template>
    <p>
        // comment text    
        </p>
<p>...</p>
        // open graph image
        <link-open-graph></link-open-graph>
        // regular image
        <link-image></link-image>
        // video embed
        <link-video></link-video>
        ...
    
</template>

ただし、サポートされるテンプレートのリストがますます長くなると、これは非常に混乱し、繰り返しが多くなる可能性があります。私たちのレビューの場合、Youtube、Twitter、Github、Soundcloud、Vimeo、Figma からの埋め込みのサポートを考えてみてください...リストは無限です。

動的コンポーネント テンプレート
もう 1 つの方法は、ある種のローダーを使用して必要なテンプレートをロードすることです。これにより、次のようなきれいなコンポーネントを作成できるようになります。

<template>
    <p>
        // comment text    
        </p>
<p>...</p>
    
        // type can be 'open-graph', 'image', 'video'...
        <dynamic-link></dynamic-link>
    
</template>

見た目はかなり良くなりましたね。このコンポーネントがどのように機能するかを見てみましょう。まず、テンプレートのフォルダー構造を変更する必要があります。

Vue.js 動的コンポーネント テンプレートの詳細な紹介 (コード例)

個人的には、スタイル設定やテスト用のファイルを後で追加できるため、コンポーネントごとにフォルダーを作成することを好みます。もちろん、どのように構造を構築するかはあなた次第です。

次に、このコンポーネントを を構築する方法を見てみましょう。

<template>
    <component></component>
</template>
<script>
export default {
    name: &#39;dynamic-link&#39;,
    props: [&#39;data&#39;, &#39;type&#39;],
    data() {
        return {
            component: null,
        }
    },
    computed: {
        loader() {
            if (!this.type) {
                return null
            }
            return () => import(`templates/${this.type}`)
        },
    },
    mounted() {
        this.loader()
            .then(() => {
                this.component = () => this.loader()
            })
            .catch(() => {
                this.component = () => import(&#39;templates/default&#39;)
            })
    },
}
</script>

それで、ここで何が起こっているのでしょうか?デフォルトでは、Vue.js は動的コンポーネントをサポートします。問題は、使用したいすべてのコンポーネントを登録/インポートする必要があることです。

<template>
    <component></component>
</template>
<script>
import someComponent from &#39;./someComponent&#39;
export default {
    components: {
        someComponent,
    },
}
</script>

コンポーネントを動的に使用したいため、ここには何もありません。そこでできることは、Webpack の動的インポートを使用することです。計算値とともに使用すると、ここで魔法が起こります。はい、計算値は関数を返すことができます。超便利!

computed: {
    loader() {
        if (!this.type) {
           return null
        }
        return () => import(`templates/${this.type}`)
    },
},

コンポーネントをインストールした後、テンプレートをロードしようとします。何か問題が発生した場合は、フォールバック テンプレートをセットアップできます。おそらくこれは、ユーザーにエラー メッセージを表示するのに役立つでしょう。

mounted() {
    this.loader()
        .then(() => {
           this.component = () => this.loader()
        })
        .catch(() => {
           this.component = () => import('templates/default')
        })
},

結論

コンポーネントについてさまざまなビューがある場合に役立つ可能性があります。

  • #拡張が簡単。

  • これは非同期です。テンプレートは必要な場合にのみロードされます。

  • コードをクリーンな状態に保ちます。

基本的にはこれです!

以上がVue.js 動的コンポーネント テンプレートの詳細な紹介 (コード例)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はsegmentfault.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。