Vue での Vue.prototype の使用に関する詳細な説明

Vue での Vue.prototype の使用に関する詳細な説明

多くのコンポーネントでデータ/ユーティリティを使用する可能性がありますが、グローバル スコープを汚染したくはありません。この場合、プロトタイプで定義することで、すべての Vue インスタンスで使用できるようにすることができます。

1. 基本的な例

main.js の Vue.prototype に変数を追加する

Vue.prototype.$appName = '私のアプリ'

この方法では、インスタンスが作成される前であっても、$appName はすべての Vue インスタンスで使用できます。

新しいVue({
  beforeCreate: 関数() {
    console.log(this.$appName)
  }
})

コンソールに「My App」と表示されます。とても簡単です!

2. インスタンスプロトタイプのスコープを設定する

appName が で始まるのはなぜですか?これは重要ですか?ここには魔法はありません。 始まり? これは重要ですか? ここには魔法はありません。始まり?これは重要ですか?ここには魔法はありません。 プロパティがすべての Vue インスタンスで使用可能になるのは単純な規則です。そうすることで、既に定義されているデータ、メソッド、計算されたプロパティとの競合を回避できます。
次のように設定した場合:

Vue.prototype.appName = '私のアプリ'

では、次のコードの出力は何でしょうか。

新しいVue({
  データ: {
    // おっと、`appName` も定義したインスタンス プロパティ名です。
    appName: '他のアプリの名前'
  },
  beforeCreate: 関数() {
    console.log(このアプリ名)
  },
  作成: 関数 () {
    console.log(このアプリ名)
  }
})

インスタンスの作成後に this.appName がデータによって上書きされるため、ログには最初に「My App」、次に「The name of some other app」が表示されます。インスタンス プロパティのスコープを設定することで、このような事態の発生を防ぎます。これを回避するために、インスタンス プロパティのスコープを指定するなど、必要に応じて独自の規則を使用することもできます。 これを回避するために、インスタンス プロパティのスコープを指定するなど、必要に応じて独自の規則を使用することもできます。必要に応じて、_appName や ΩappName などの独自の規則を使用して、プラグインや将来のプラグインとの競合を回避することもできます。

3. グローバル変数の登録と使用

各コンポーネントは vue インスタンスです。Vue.prototype は変数を追加しますが、これは各コンポーネントにプロパティを追加するだけです。このプロパティの値はグローバルではありません。
たとえば、次の例をご覧ください。

// メイン.js
'vue' から Vue をインポートします
'./App' から App をインポートします
'./router' からルーターをインポートします
'./store' からストアをインポートします

Vue.config.productionTip = false
Vue.prototype.$appName = 'main'

新しいVue({
    el: '#app',
    店、
    ルーター、
    コンポーネント: { アプリ },
    テンプレート: '<App/>',
})

// すべてのコンポーネントにプロパティ $appName を登録し、初期値 'main' を割り当てると、すべてのコンポーネントが this.$appName を使用してこの変数にアクセスできます。
// コンポーネントに値が割り当てられていない場合、初期値は 'main' になります
// ホーム.vue
<テンプレート>
  <div>
    <div @click="changeName">名前を変更</div>
    <div @click="gotoTest2">テスト2に移動</div>
  </div>
</テンプレート>

<スクリプト>
エクスポートデフォルト{
  方法:{
    名前を変更する(){
      this.$appName = "test1"
    },
    gotoTest2(){
      this.$router.push('/about')
    } 
  }
}
</スクリプト>
// について.vue
<テンプレート>
  <div>
    <div>test2 の {{this.$appName}}</div>
  </div>
</テンプレート>

ホームで名前の変更をクリックし、About にジャンプします。Test2 では About にまだ main が表示されています。
グローバル変数の機能を実装したい場合は、属性を参照型に変更する必要があります。

Vue.prototype.$appName = { 名前: 'main' }

後で、this.$appName.nameを使用して対応する値を変更して参照します。aboutを入力すると、test2にtest1が表示されます。

4. プロトタイプメソッドのコンテキスト

JavaScript では、プロトタイプ メソッドはインスタンスのコンテキストを取得します。つまり、これを使用して、データ、計算されたプロパティ、メソッド、またはインスタンスで定義されているその他のものにアクセスできます。
これを $reverseText というメソッドで使用してみましょう。

 // メイン.js
Vue.prototype.$reverseText = 関数 (プロパティ名) {
  this[プロパティ名] = this[プロパティ名]
    。スプリット('')
    。逆行する()
    。参加する('')
}
// 対応するコンポーネント <script>
エクスポートデフォルト{
  データ() {
    戻る {
      メッセージ: 'こんにちは'
    }
  },
  作成された() {
    console.log(this.message) // => "こんにちは"
    this.$reverseText('メッセージ')
    console.log(this.message) // => "olleH"
  }
}
</スクリプト>

5. 応用例

5.1 Axiosの紹介

npm インストール vue-axios --save

npm install qs.js --save //その機能は、json形式をデータに必要な形式に直接変換することです
// メイン.js
'vue' から Vue をインポートします
'axios' から axios をインポートします
'qs' から qs をインポートします

Vue.prototype.$axios = axios //グローバル登録、使用方法: this.$axios
Vue.prototype.qs = qs // グローバル登録、使用方法: this.qs

// 対応するコンポーネント <script>
  エクスポートデフォルト{
    データ(){
      戻る {
        ユーザーID:666、 
                トークン:''、
      }
    },
    作成された(){
      this.$axios({
        メソッド:'post',
        url:'api',
        data:this.qs.stringify({ //バックエンドに送信されるデータはこちら userId:this.userId,
          トークン:this.token,
        })
      }).then((response) =>{ //ここではES6構文が使用されています console.log(response) //リクエストが正常にデータを返しました}).catch((error) =>{
        console.log(error) //リクエストが失敗したときに返されるデータ})
    }
  }
</スクリプト>

Vue.prototype、Vue.component、Vue.use の違い

1. Vue.プロトタイプ

複数の場所で使用する必要があり、グローバルスコープを汚染したくない場合は、このように定義すると、すべての Vue インスタンスで使用できるようになります。
参考: https://cn.vuejs.org/v2/cookbook/adding-instance-properties.html
$ は、これがすべての Vue インスタンスで使用可能なプロパティであり、メソッドや変数などによく使用されることを示します。

'echarts' から echarts をインポートします
Vue.prototype.$echarts = echarts 


2. vue.コンポーネント

コンポーネントをグローバルに登録し、
最初のパラメータはコンポーネントを呼び出すときに記述するコンポーネント名です。 2 番目のパラメータはコンポーネントを導入するときに記述する名前です。 カスタム コンポーネントを登録するときに使用できます。

'base/loading' から myLoading をインポートします。
Vue.component('myLoading',myLoading);

3. Vue.use

これもグローバル登録です。コンポーネントとの違いは、受信したパラメータにインストール メソッドが必要であることです。これは、サードパーティのプラグインを登録するためによく使用されます。

'element-ui' から ElementUI をインポートします。
Vue.js の ElementUI 要素をオーバーライドします。

Vue における Vue.prototype の詳しい使い方についてはこれで終わりです。Vue.prototype の使い方に関するより関連性の高いコンテンツについては、123WORDPRESS.COM の過去の記事を検索するか、以下の関連記事を引き続きご覧ください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • Vue ソースコードで const _toStr = Object.prototype.toString が必要な理由の分析

<<:  Ubuntu 16.04 で FTP サーバーを構築するチュートリアル

>>:  mysql のファイル mysql-bin.000001 とは何ですか? 削除できますか?

推薦する

共通要素のデフォルトのマージンとパディング値に関する議論

今日は、さまざまなブラウザでのデフォルト要素のマージン値が何であるかという問題について説明しました。...

React コンポーネント間で通信する 3 つの方法 (シンプルで使いやすい)

目次1. 親子コンポーネント通信2. クロスレベルコンポーネント通信1. レイヤーごとに値を渡す2....

0.1秒の価値!フロントエンドのウェブページの高速化の問題について簡単に説明します

私が現在の仕事の面接を受けたとき、リーダーが真剣にこう言っていたのを覚えています。「今の世の中はイン...

Linux/Mac MySQL パスワードを忘れた場合の対処方法

Linux/Mac の MySQL パスワードを忘れた場合はどうすればいいですか?心配しないでくださ...

CentOS7.8 に mysql 8.0.20 をインストールするための詳細なチュートリアル

1. MySQLソフトウェアをインストールするMySQL 公式 Yum リポジトリ、MySQL バー...

HTMLでキーワードを強調表示するのに最適なソリューション

最近、プロジェクトに取り組んでいるときに、Web ページ上のキーワードを強調表示する機能に遭遇しまし...

Mybatisの特殊文字処理の詳細な説明

序文: Mybatis の特殊文字処理、Mybatis の xml ファイル内の特殊文字の処理、ここ...

適応的な幅と高さを持つ9つの正方形グリッドの背景画像の切り取りの分析

<br />幅と高さが適応するオリジナルの 9 グリッド レイアウトをベースに、ネットワ...

MySQLトランザクションとMySQLログの詳細な説明

取引特性1. アトミック性: トランザクションの開始後、すべての操作が完了するか、まったく実行されな...

LINUX でポートが占有されているかどうかを確認する方法

ポートが占有されているかどうかは、これまで一度もわかりませんでした。多くの人に尋ねて、ようやくわかり...

挿入前にレコードが既に存在するかどうかを確認するには、SQL ステートメントを使用します。

目次SQL文を挿入する前にレコードが既に存在するかどうかを確認するSQL挿入時の判断の簡単なコレクシ...

SQL 文における複合主キーと結合主キーに関する予備的研究

1. 複合主キーいわゆる複合主キーとは、テーブルの主キーが複数のフィールドで構成され、ビジネス上の意...

MySQL 8.0 の新機能 - 管理ポートの使用の概要

目次序文接続管理追加の接続管理ポート要約する序文皆さんの多くは、次のようなエラー メッセージに遭遇し...

MySQL DDL による同期遅延を解決する方法

目次序文解決ツールの紹介仕組み使用制限使用上の注意使用例いくつかのパラメータの説明出力例Tencen...

JavaScript の instanceof メソッドの手動実装

1. instanceofの使用法instanceof演算子は、コンストラクター関数のprototy...