Vue プロジェクトで TypeScript クラスを適用する方法

Vue プロジェクトで TypeScript クラスを適用する方法

1. はじめに

TypeScriptは、vue によってリリースされた公式ライブラリであるvue-class-componentライブラリに基づいており、 classを使用してvue単一ファイル コンポーネントを開発することをサポートしています。

主な機能は次のとおりです。

  • methodsクラスのメンバーメソッドとして直接宣言できる
  • 計算プロパティはクラスのプロパティアクセサとして宣言できる
  • 初期化されたdataクラス属性として宣言できる
  • datarender 、およびすべてのVueライフサイクルフックは、クラスメンバーメソッドとして直接使用できます。
  • その他のプロパティはすべてデコレータに配置する必要があります

2. 使用

vue-property-decoratorは主に以下のデコレータを提供します

  • @プロップ
  • プロップシンク
  • @モデル
  • @時計
  • @提供する
  • @注入
  • @ProvideReactive
  • @InjectReactive
  • @エミット
  • @参照
  • @Component (vue-class-component によって提供)
  • ミックスイン(vue-class-component によって提供)

1. @コンポーネント

Componentデコレータ このクラスをVueコンポーネントとしてマークするため、オプションが設定されていない場合でも省略できません。

namecomponentsfiltersdirectives 、およびカスタム プロパティを定義する必要がある場合は、次のようにComponentデコレータで定義できます。

'vue-property-decorator' から {Component,Vue} をインポートします。 
'@/components' から {componentA,componentB} をインポートします。 
 
 @成分({ 
    コンポーネント:{ 
        コンポーネントA、 
        コンポーネントB、 
    }, 
    ディレクティブ: { 
        集中: 
            // 挿入された命令の定義: function (el) { 
                el.フォーカス() 
            } 
        } 
    } 
}) 
デフォルトのクラスをエクスポートし、YourCompoent を Vue に拡張します{ 
    
} 


2. 計算、データ、方法

ここでは、コンポーネントのdatamethodsの属性はキャンセルされます。従来、データ戻りオブジェクトの属性とmethodsのメソッドは、クラスの属性とメソッドとしてクラス内に直接定義する必要がありました。

@成分 
デフォルトのクラスHelloDecoratorをエクスポートし、Vueを拡張します。 
    count: number = 123 // クラス属性は前のデータと同等です 
 
    add(): number { // クラスメソッドは前のメソッドと同じ this.count + 1 
    } 
 
    // 計算属性を取得する get total(): number { 
      this.count + 1 を返す 
    } 
 
    // 計算プロパティを設定する set total(param:number): void { 
      this.count = パラメータ 
    } 
} 

3. @props

コンポーネントは属性のデコレータを受け取ります。これは次のように使用されます。

vue-property-decorator から {Component,Vue,Prop} をインポートします。 
 
@成分 
デフォルトのクラスをエクスポートし、YourComponent を Vue に拡張します { 
    @Prop(文字列) 
    propA: 文字列; 
     
    @Prop([文字列,数値]) 
    propB:文字列|数値; 
     
    @Prop({ 
     型: 文字列、// 型: [文字列、数値] 
     default: 'デフォルト値', // 通常は文字列または数値 
      // オブジェクトまたは配列の場合。デフォルト値はファクトリー関数から返されます // default: () => { 
      // ['a','b'] を返す 
      // } 
     必須: true、 
     バリデータ: (値) => { 
        戻る [ 
          「進行中」、 
          「落ち着いた」 
        ].indexOf(値) !== -1 
     } 
    }) 
    propC: 文字列; 
} 


4. @ウォッチ

これは実際には Vue のリスナーであり、次のようになります。

'vue-property-decorator' から { Vue, Component, Watch } をインポートします。 
 
@成分 
デフォルトのクラスをエクスポートし、YourComponent を Vue に拡張します { 
  @Watch('子') 
  onChildChanged(値: 文字列、古い値: 文字列) {} 
 
  @Watch('person', { 即時: true, ディープ: true }) 
  onPersonChanged1(val: Person、oldVal: Person) {} 
 
  @Watch('人') 
  onPersonChanged2(val: Person、oldVal: Person) {} 
} 


5. @エミット

vue-property-decoratorによって提供される@Emitデコレータは、次のように Vue のイベントの$emitトリガーを置き換えます。

'vue-property-decorator' から {Vue, Component, Emit} をインポートします。 
    @成分({}) 
    デフォルトのクラスをエクスポートし、Some extends Vue{ 
        マウントされた(){ 
            this.$on('emit-todo', 関数(n) { 
                コンソール.log(n) 
            }) 
            this.emitTodo('world'); 
        } 
        @エミット() 
        出力Todo(n: 文字列){ 
            コンソールにログ出力します。 
        } 
    } 

結論

上記のtypescript版のvue classの構文は、通常のjavascript版とはかなり異なっていることがわかります。クラスとデコレータは多くの場所で使用されていますが、実際には本質は同じです。継続的に書くことによってのみ、それを習得することができます。

VueプロジェクトでTypeScriptを適用する方法についてはこれで終わりです。Vue プロジェクトでTypeScript適用する方法の詳細については、123WORDPRESS.COM の以前の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • TypeScript 列挙型
  • TypeScript の基本型の紹介
  • TypeScriptの列挙型を詳しく説明する
  • TypeScript における型保護の詳細な説明
  • TypeScriptの型保護メカニズムについての簡単な説明
  • TypeScript のクラス

<<:  Linuxのpasswdコマンドの使用

>>:  MySQL マスタースレーブレプリケーションの詳細な分析

推薦する

Ubuntu 18.04 のログインループ/ブートインターフェイスで停止/グラフィカルインターフェイスに入ることができない問題を解決する方法

原因: NVIDIA グラフィック カード ドライバーが破損している解決:コマンドラインモードで再起...

Apache Log4j2 が核レベルの脆弱性と迅速な修正を報告

Apache Log4j2 が核レベルの脆弱性を報告し、スタックリーダーの友人たちは大騒ぎになりまし...

自動同期テーブル構造のMySql開発

開発の問題点開発プロセスでは、データベース フィールドが頻繁に変更されるため、RD 環境と QA 環...

JavaScriptオブジェクト指向について学ぼう

目次JavaScript プロトタイプチェーンオブジェクトプロトタイプトップレベルのプロトタイプOb...

HTML テーブルタグチュートリアル (17): テーブルタイトルの垂直配置属性 VALIGN

表のキャプションは表の上または下に配置でき、プロパティで調整できます。デフォルトのテーブル タイトル...

vscodeを使用してuniappを開発する方法

私はフロントエンド プロジェクトの開発に常に vscode を使用してきたため、現在ではいくつかの小...

大規模なウェブサイトアーキテクチャを設計・構築する際に考慮すべき10の課題

ここでは、PHP、JSP、または .NET 環境については説明しません。アーキテクチャの観点から問題...

Photoshop を使って Web ワイヤーフレームを作成する方法

この投稿では、通知、画像とビデオ、フォーム フィールド、タイトル、段落、箇条書きリスト、ナビゲーショ...

nginx で複数のフロントエンド プロジェクトをデプロイするいくつかの方法

nginx を使用して 1 つのサーバーに複数のフロントエンド プロジェクトをデプロイする 3 つの...

MySQL サーバー ログイン エラー ERROR 1820 (HY000) の解決方法

障害サイト: MySQL サーバーにログインし、どのコマンドを実行してもこのエラーが発生します my...

HTML テーブルに複雑なテーブル ヘッダーを実装するためのサンプル コード

複雑な表を作成するには HTML を使用します。複雑なテーブルでは通常、td の rowspan 属...

VMware Workstation 15 Pro に Ubuntu 1804 をインストールするチュートリアル (画像とテキスト付き)

このメモはインストール チュートリアルです。実用的な意味はありません。記録のためだけに書いています。...

Vue2とVue3の兄弟コンポーネント通信バスの違いと使い方

目次vue2.x vue3.x tiny-emitterプラグインの使用Mittプラグインの使用vu...

JavaScript の for/of、for/in の詳細な紹介

目次JavaScriptでは、 forループを記述する一般的な方法がいくつかあります。最初の、そして...

MySQLデータファイルの保存場所を表示する方法

次のような疑問が湧くかもしれません。MySQLをローカル (自分のコンピュータ) にインストールした...