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. まず、node、express、express-generator をインストールします (4...
序文Workbench が 1 台のコンピューターにインストールされており、別の Ubuntu サー...
コードをコピーコードは次のとおりです。 wmode パラメータ:透過モード: z-indexを使用し...
序文ルーティングの管理は、ほとんどのシングルページ アプリケーションにとって不可欠な機能です。 Vu...
目次一般的なアップロードコンポーネントの開発以下の機能を実装する必要がありますカスタムテンプレートサ...
目次操作方法操作プロセス既存のテーブルにパーティション テーブルを作成し、データを新しいテーブルに移...
Vueのメソッドとプロパティ1. 方法使用法 1メソッド: {メソッド名: function(){}...
目次序文:特定の操作ステップ1: プレハブを準備するステップ2: オブジェクトプールを初期化するステ...
MySQL UNION 演算子このチュートリアルでは、MySQL UNION 演算子の構文と例を紹介...
Cockpit は、CentOS および RHEL システムで使用できる Web ベースのサーバー管...
出典: https://blog.csdn.net/qq_44761243/article/deta...
目次序文1. 共通オブジェクトを反復処理するには for...of を使用します2. 通常のオブジェ...
docker exec コマンドは、実行中のコンテナ内でコマンドを実行できます。 docker ex...
効果: アイデア:入力タイプ属性を使用して、タイプ値がテキストの場合はパスワードを表示し、タイプ値が...