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 のアンインストールを含む) の概要
px(ピクセル)ピクセルという言葉は皆さんもよくご存知だと思います。次に、この単位に関するちょっとし...
docker-compose.yml ファイルで './' 相対パスを許可する バー...
コードを書くとき、2 つのファイル間の違い、または同じファイルの異なるバージョン間の違いを知る必要が...
目次1. WeChatパブリックプラットフォームからWeChat開発者ツールをダウンロードする2. ...
この記事は、@C7210 によって翻訳されたブログ「Usability Counts」からの翻訳です...
1. 仮想環境はプロジェクトに従い、単一のプロジェクト用の仮想環境を作成します(Python 3.4...
この記事では、MySQL 8.0.12のインストールされていないバージョンを設定して起動するための具...
序文この記事では主に、MySQL ストレージ テーブル エラー「java.sql.SQLExcept...
目次既存のイメージからイメージを更新します。イメージを最初から構築する: Docker イメージ リ...
[LeetCode] 182.重複メールPerson という名前のテーブル内のすべての重複メールを...
MySQL は非常に強力なリレーショナル データベースです。しかし、初心者の中には、インストールや設...
ARGB は、アルファ (透明度) チャネルが追加された RGB カラー モードであり、32 ビット...
この記事では、マーキースタイルのテキストの水平スクロールを実現するためのVueの具体的なコードを参考...
目次1. 反応する基本的な使い方注目すべき機能クラスコンポーネント仮想DOMライフサイクルメソッドJ...
序文説明を簡略化するために以前に設定した要件は、他のグループから MQ メッセージを受信し、データベ...