vue2 における非親子コンポーネントの値の伝達は、主にイベント バスを介して行われ、vue インスタンスを作成し、そのインスタンスを異なるコンポーネントにインポートすることで、非親子コンポーネント間の通信動作を実装します。 Vue3 は **provide** プロパティと **inject** プロパティを提供しており、親子関係のないコンポーネント間の通信を実現できます。 App.vue (親)、sub1 (子)、sub2 (子の子) の 3 つのコンポーネントがあるとします。 アプリ.vue<テンプレート> <div style="border: 1px solid pink"> <h1>私はあなたの父親です</h1> 👇 <sub1/> </div> </テンプレート> <スクリプト> './sub1' から sub1 をインポートします エクスポートデフォルト{ 名前:「アプリ」、 コンポーネント:{ サブ1、 }, provide:{ // 親コンポーネントで provide を定義して、渡される値を宣言します names:['peanut','javascriptKing'] } } </スクリプト> <スタイルスコープ> </スタイル> サブ1.vue<テンプレート> <h2>私は第 1 レベルの子コンポーネントです</h2> 👇 <sub2/> </テンプレート> <スクリプト> 「./sub2」からsub2をインポートします。 エクスポートデフォルト{ 名前: "sub1", コンポーネント:{ サブ2、 } } </スクリプト> <スタイルスコープ> </スタイル> サブ2.vue<テンプレート> <h3>私は末っ子、孫です</h3> <div>トップレベルコンポーネントの名前配列を参照しました ===> {{names}}</div> </テンプレート> <スクリプト> エクスポートデフォルト{ 名前: "sub2", // inject:['names'] を通じて子コンポーネントでクロスレベル値を受け入れます。 } </スクリプト> <スタイルスコープ> </スタイル> 実装効果は次のようになり、トップレベルコンポーネントで渡された値が正常に取得できることがわかります。 しかし、問題もあります。 つまり、トップレベルのコンポーネントが渡したい値が変更された場合、どうすればそれを応答性のあるものにできるでしょうか? provide プロパティでこれを使用して現在のインスタンスを取得するにはどうすればよいでしょうか? ここでは、provide 属性をメソッドとして記述し、配列またはオブジェクトを返す必要があります。 <テンプレート> <div style="border: 1px solid pink"> <h1>私はあなたの父親です</h1> 👇 <sub1/> </div> </テンプレート> <スクリプト> './sub1' から sub1 をインポートします エクスポートデフォルト{ 名前:「アプリ」、 データ(){ 戻る { 名前:['ピーナッツ','javascriptキング'] } }, コンポーネント:{ サブ1、 }, /*このように書いても、this は取得されません。現時点では、スクリプト内の this のスコープが未定義であることを意味します*/ /*提供する:{ this.names、 }*/ // 次のように記述する必要があります provide(){ 戻る { 名前:this.names } } } </スクリプト> <スタイルスコープ> </スタイル> 上で書いたように、これで指し示すインスタンス配下のデータを取得することはできるのですが、これらを依存関係を形成させて応答性を実現するにはどうすればよいのでしょうか。これを行うには、App.vue に次の変更を加える必要があります。 <テンプレート> <div style="border: 1px solid pink"> <h1>私はあなたの父親です</h1> 👇 <sub1/> </div> </テンプレート> <スクリプト> './sub1' から sub1 をインポートします 'vue' から { computed } をインポートします エクスポートデフォルト{ 名前:「アプリ」、 データ(){ 戻る { 名前:['ピーナッツ','javascriptキング'] } }, コンポーネント:{ サブ1、 }, /*このように書いても、this は取得されません。現時点では、スクリプト内の this のスコープが未定義であることを意味します*/ /*提供する:{ this.names、 }*/ // 次のように記述する必要があります provide(){ 戻る { names:computed(() =>{ this.names.length }) // 計算プロパティを使用して変数を返すことで、names がデータ内の名前と依存関係を形成するようにします} }, マウント() { 設定間隔(()=>{ this.names.push('vue king!') },1000) } } </スクリプト> <スタイルスコープ> </スタイル> 要約するこの記事はこれで終わりです。皆さんのお役に立てれば幸いです。また、123WORDPRESS.COM のその他のコンテンツにも注目していただければ幸いです。 以下もご興味があるかもしれません:
|
<<: ログインインターフェースの使いやすさとセキュリティのバランスをとる方法
>>: Linux での JDK のインストール (OpenJDK のアンインストールを含む) の概要
目次1. プロセス2. コアアーキテクチャ2.1 サーバー層の基本コンポーネントの紹介3. ステート...
目次序文始める序文サーバーのデフォルトの SSH ポート番号は通常 22 であるため、ほとんどのユー...
Like は中国語で「好き」を意味しますが、MySQL データベースに適用される場合、Like は、...
dockerの登場により、多くのサービスが徐々にハードウェアアーキテクチャへの依存から脱却しました。...
目次1. 機能説明2. 親コンポーネント3. サブコンポーネント NextTick.vue 4なぜ未...
1. Redisイメージを取得するdocker pull redis 2. それぞれポート6379、...
最近、Docker がコンテナの起動時に特定のプロセスを直接実行できるようにする方法を調べていたとこ...
Cocos Creator バージョン: 2.3.4デモのダウンロード: https://files...
目次1. 実施プロセス2. オブザーバーを表示する3. ウォッチャーを実装する4. コンパイルを実装...
MySQL 5.5 のインストールと設定方法のグラフィックチュートリアルMySQL 5.5 のインス...
html <div class="スピナー"></div&g...
JavaScriptでのランダムコードの生成と検証は参考までに。具体的な内容は以下のとおりです。イベ...
共通コンベンションタグ自己終了タグ。閉じる必要はありません (例: img input br hr ...
目次ブラウザ同一生成元ポリシー1. VUEフロントエンド構成プロキシはクロスドメインの問題を解決しま...
フロントエンド開発者としては、IEの落とし穴は避けて通れません。他のブラウザはいいのにIEは壊れてい...