Vueにおける混合継承の詳細な説明

Vueにおける混合継承の詳細な説明

混合継承の影響:

Aにはデータ属性とsayメソッドがある

Bにはseeメソッドとname属性がある

AがBを継承すると、Aは自身のデータ属性とsayメソッドに加えて、Bのseeメソッドとname属性も持つようになる。

C に AB を混合すると、C には独自の要素と、A のデータ属性と say メソッド、および B の see メソッドと name 属性が含まれるようになります。

1. 継承

Vue.extend メソッド

Vue.extend( Vue ComponentOptions ) は、基本 Vue コンストラクターを使用して「サブクラス」を作成するグローバル メソッドです。引数は、コンポーネント オプション (Vue ComponentOptions) を含むオブジェクトです。​

データ属性は特別なケースであり、注意が必要です。Vue.extend() の関数(ファクトリ関数)である必要があります。

// コンストラクタを作成する ja
var プロファイル = Vue.extend({
  テンプレート: '<p>{{firstName}} {{lastName}} 別名 {{alias}}</p>',
  データ: 関数 () {
    戻る {
      ファーストネーム: 'ウォルター',
      姓: 'ホワイト',
      別名:「ハイゼンベルク」
    }
  }
})
// Profile クラスのインスタンスを作成し、要素に添付します。
新しいプロファイル().$mount('#mount-point')

​プロパティを拡張する

extends を使用すると、Vue.extend を使用せずに別のコンポーネントの拡張機能 (単純なオプション オブジェクトまたはコンストラクター) を宣言できます。これは主に、単一ファイル コンポーネントの拡張を容易にするためです。タイプはオブジェクトまたは関数です

pageTwo.vue ファイル

<テンプレート>
    <div>
        <h3>2 ページ目</h3>
        <ページング :total="合計" :pageSize="ページサイズ" :sizeOptions="サイズオプション"/>
    </div>
</テンプレート>
<スクリプト>
    '../component/PagingData.vue' から PagingData をインポートします。
    エクスポートデフォルト{
        // 継承を実装する extends: PagingData
    }
</スクリプト>

注: 上記のファイルの paging は、グローバルに登録されたカスタム コンポーネントです。Pag​​ingData もコンポーネントですが、登録されていません。代わりに、そのコンテンツは継承を通じて pageTwo にマージされます。

2. ミックスイン

ミックスイン オブジェクトには任意のコンポーネント オプションを含めることができます。コンポーネントがミックスインを使用する場合、ミックスインのすべてのオプションがコンポーネント自体のオプションに「混合」されます。

マージルール

コンポーネントとミックスインに同じ名前のオプションがある場合、それらのオプションは適切な方法で「マージ」されます。

1. データ オブジェクトは内部で再帰的にマージされ、競合が発生した場合はコンポーネント データが優先されます。

2. 同じ名前のフック関数(ライフサイクル関数)は配列にマージされ、すべて呼び出されます。さらに、ミックスインのフックはコンポーネント自体のフックの前に呼び出されます。

3. メソッド、コンポーネント、ディレクティブなど、値がオブジェクトであるオプションは、同じオブジェクトにマージされます。 2 つのオブジェクトのキー名が競合する場合は、コンポーネント オブジェクトのキーと値のペアが取得されます。

継承(拡張)もこのマージのルールです。

ミックスインを使用して多重継承を実装できます。ミックスインは継承の実装には使用されません。複数の Vue ComponentOptions (Vue オプション コンポーネント オブジェクト) を結合します。

形式: ミックスイン: [コンポーネント 1 をマージ、コンポーネント 2 をマージ、…]

pageOne.vue ファイル

<テンプレート>
    <div>
        <h3>1ページ目</h3>
        <hr/>
        <ページング @pageChangeEvt="cb" :total="合計" :pageSize="ページサイズ" :sizeOptions="sizeOptions"/>
    </div>
</テンプレート>
<スクリプト>
    '../component/PagingData.vue' から PagingData をインポートします。
    '../component/PagingFunc' から PagingFunc をインポートします。
    エクスポートデフォルト{
        // 拡張: {PagingFunc、PagingData}、
        // 拡張: [PagingFunc、PagingData]、
        ミックスイン: [PagingFunc、PagingData]、
    }
</スクリプト>

注: 上記のファイルの paging は、グローバルに登録されたカスタム コンポーネントです。Pag​​ingData と PagingFunc もコンポーネントですが、登録されていません。代わりに、それらのコンテンツはミキシングによって pageOne にマージされます。

要約する

この記事はこれで終わりです。皆さんのお役に立てれば幸いです。また、123WORDPRESS.COM のその他のコンテンツにも注目していただければ幸いです。

以下もご興味があるかもしれません:
  • Vue2.0コンポーネントの継承と拡張の詳細な説明
  • Web プロジェクト開発 VUE の混合と継承の原則
  • Vueのミックスインと継承について詳しく説明します

<<:  Webデザインチュートリアル(2):模倣と盗作について

>>:  10 HTML テーブル関連タグ

推薦する

ボタンの権限判定を実装するためのVueカスタムv-has命令

アプリケーションシナリオバックグラウンド管理システムを例にとると、各ユーザーには異なるボタン権限があ...

Dockerコンテナのログ分析

コンテナログを表示するまず、 docker run -it --rm -d -p 80:80 ngi...

Vuexの役割についての深い理解

目次概要コンポーネント間でデータを共有する方法Vuex の原則の紹介Vuexはコンポーネントのグロー...

MySQL の group by と having の詳細な説明

GROUP BY 構文を使用すると、指定されたデータ列の各メンバーに従ってクエリ結果をグループ化して...

Flexレイアウトとスケーリング計算についての簡単な説明

1. Flexレイアウトの紹介Flex は Flexible Box の略で、「柔軟なレイアウト」を...

js で継承を実装する 5 つの方法

コンストラクタの借用この手法の基本的な考え方は単純です。サブタイプ コンストラクター内からスーパータ...

Vueはカスタムツリーコンポーネントを再帰的に実装します

この記事では、カスタムツリーコンポーネントを再帰的に実装するVueの具体的なコードを参考までに共有し...

CSSをインポートする方法は何ですか?linkと@importの違いは何ですか?選択方法

Taobao のウェブページはインポートを使用していますが、多くのウェブサイトはリンクを使用していま...

MySQL8 ベースの docker-compose デプロイメント プロジェクトの実装

1. まず、次のパスに従って対応するフォルダを作成します。 ローカルのdockerでmysqlを実行...

Vue.jsはシンプルなタイマー機能を実装します

この記事では、参考までに、簡単なタイマー機能を実装するためのvue.jsの具体的なコードを紹介します...

Vueでスワイパープラグインを使用する際の問題を解決する

デモを作成するときにこのプラグインを使用していくつか問題が発生したため、プラグインの使用方法といくつ...

HTML いくつかの特別な分割線効果

1. 基本ライン 2. 特殊効果(効果は独立しておらず、互いに組み合わせることができます) 1. 両...

alpineをベースにdockerfileで作成したクローラーScrapyイメージの実装

1.アルパインイメージをダウンロードする [root@DockerBrian ~]# docker ...

CSS3でカルーセル画像を作成する方法

スライドショーは Web ページでよく見られます。美しい写真が使われています。こちらは純粋な CSS...

tomcat9.exeをクリックするとクラッシュする問題を解決する方法

ある読者から連絡があり、ダウンロードが終了し、操作がまだ開始されていないのに、なぜ Tomcat の...