1. 親コンポーネントと子コンポーネントの関係この記事では、Vue における親コンポーネントと子コンポーネント間の通信方法についてまとめます。 では、Vue では親コンポーネントと子コンポーネントの関係はどのように構築されるのでしょうか。また、どのコンポーネントを親コンポーネントと呼び、どのコンポーネントを子コンポーネントと呼ぶことができるのでしょうか。 私の理解では、親コンポーネントと子コンポーネントの関係も比較的単純です。 vue-cli ツールを使用して構築されたプロジェクトでは、1 つのコンポーネントに別のコンポーネントへの参照を登録することがよくあります。 ホーム.vue <テンプレート> <div class="home"> <p>これはホームコンポーネントです</p> </div> </テンプレート> <スクリプト> エクスポートデフォルト{ 名前: 'ホーム' } </スクリプト> <スタイルスコープ> 。家{ 境界線:1px 実線 #4488ff; 表示: インラインブロック; パディング: 10px; } </スタイル> アプリ.vue <テンプレート> <div id="アプリ"> <p>これがアプリコンポーネントです</p> <!-- stpe3: 使用 --> <ホーム></ホーム> </div> </テンプレート> <スクリプト> // ステップ1: './components/Home' から Home をインポートします エクスポートデフォルト{ 名前: 'アプリ'、 // ステップ2: コンポーネントを登録する: { ホーム } } </スクリプト> <スタイル> #アプリ { フォントファミリ: 'Avenir'、Helvetica、Arial、sans-serif; -webkit-font-smoothing: アンチエイリアス; -moz-osx-font-smoothing: グレースケール; 色: #2c3e50; 表示: インラインブロック; border:1px オレンジ一色; パディング: 10px; } </スタイル> 上記 2 つのコンポーネントでは、App コンポーネントに Home コンポーネントを導入し、登録して使用しました。 Vue では、App コンポーネントを親コンポーネント、Home コンポーネントを子コンポーネントと呼ぶことができます。これら 2 つのコンポーネントは親子関係を形成します。 ここで注目すべきは、導入、登録、利用という3つのステップが不可欠であるということです。 そうしないと、2 つのコンポーネントは親子関係を形成できず、後述するいくつかの通信方法を使用して通信することもできません。 Vue における親子コンポーネントの構成関係を理解した後、親子コンポーネントが相互に通信する方法について説明します。 2. 小道具Vue で親子コンポーネントが通信する最初の方法は props 属性を使用することで、親コンポーネントが子コンポーネントと通信します。 実践してみましょう。 まず、親コンポーネント内で子コンポーネントが使用されている場所を見つけ、親コンポーネントが子コンポーネントに渡す必要があるデータを追加します。 App.vue (変更されていないコードの一部は省略) <テンプレート> <div id="アプリ"> <p>これがアプリコンポーネントです</p> <ホーム タイトル="Vue における親コンポーネントと子コンポーネント間の通信方法" 2020/03/05 14:25 更新 </ホーム> </div> </テンプレート> ご覧のとおり、このステップでは、サブコンポーネントが使用されるサブコンポーネントに渡す必要がある 2 つのデータ (タイトルと日付) を追加しました。 <ホーム タイトル="Vue における親コンポーネントと子コンポーネント間の通信方法" 2020/03/05 14:25 更新 </ホーム> 次のステップでは、子コンポーネントで props を使用して、これら 2 つのパラメータを受け取ります。 Home.vue (変更されていないコードの一部は省略) <スクリプト> エクスポートデフォルト{ 名前: 'ホーム'、 プロパティ: ['タイトル', '日付'] } </スクリプト> 最後のステップでは、vue データを使用する場合と同じように、子コンポーネントでタイトルと日付を使用できます。 Home.vue (変更されていないコードの一部は省略) <テンプレート> <div class="home"> <p>これがホームコンポーネントです</p> <p>タイトル:{{タイトル}}</p> <p>日付:{{date}}</p> </div> </テンプレート> プロジェクトを開始したら、ブラウザで効果を確認します。 3. $エミットVue における親子コンポーネント通信の 2 番目の方法は、子コンポーネントと親コンポーネント間の通信である $emit メソッドを使用することです。 $emit メソッドは Vue のインスタンス メソッドであり、その使用方法は次のとおりです。 最初のパラメータ eventName はイベント名と呼ばれます。 イベント名に対応するイベントは、親コンポーネントの v-on がリッスンするネイティブ DOM イベントです (クリックのようなカスタム イベントとして理解できます)。 子コンポーネントで $emit(eventName) を実行すると、親コンポーネントの対応するイベントがトリガーされます。 したがって、最初に子コンポーネントの $emit メソッドを使用して、親コンポーネントでイベントをトリガーするコードを記述します (2 番目のパラメーターを渡さずに)。 ホーム.vue <テンプレート> <div class="home"> <p>これはホームコンポーネントです</p> <el-button type="primary" v-on:click='btnClickHandler("Yes")'>はい</el-button> <el-button type="primary" v-on:click='btnClickHandler("No")'>いいえ</el-button> </div> </テンプレート> <スクリプト> エクスポートデフォルト{ 名前: 'ホーム'、 メソッド: { btnClickHandler: 関数(パラメータ){ if(パラメータ == "はい"){ これを$emit('sayYes'); }それ以外の場合(パラメータ == "いいえ"){ this.$emit('sayNo'); } } } } </スクリプト> ご覧のとおり、Home サブコンポーネントには 2 つのボタンがあります。 [はい] ボタンをクリックすると、 this.$emit('sayYes') が実行され、親コンポーネントで sayYes イベントがトリガーされます。 [いいえ] ボタンをクリックすると、this.$emit('sayNo') が実行され、親コンポーネントで sayNo イベントがトリガーされます。 次に、親コンポーネントに対応するネイティブ DOM イベントを実装します。 アプリ.vue <テンプレート> <div id="アプリ"> <p>これがアプリコンポーネントです</p> <ホーム v-on:sayYes='val="はい"' v-on:sayNo='val="no"'> </ホーム> <p>値: {{val}}</p> </div> </テンプレート> <スクリプト> './components/Home' から Home をインポートします。 エクスポートデフォルト{ 名前: 'アプリ'、 データ() { 戻る { 値: "デフォルト", } }, コンポーネント: { ホーム }, } </スクリプト> このうち、 sayYes と sayNo は親コンポーネントで定義されたネイティブ DOM イベントです。 <ホーム v-on:sayYes='val="はい"' v-on:sayNo='val="no"'> </ホーム> val は親コンポーネントで定義されたデータであり、そのデフォルト値は 'default' です。 次に、サブコンポーネントのコード ロジックと組み合わせると、次の結果が得られることがわかります。 [はい] ボタンをクリックすると、 this.$emit('sayYes') が実行され、親コンポーネントで sayYes イベントがトリガーされます。 sayYes イベントでは、vue データ内の val 値が yes に変更されます。 [No] ボタンをクリックすると、this.$emit('sayNo') が実行され、親コンポーネントで sayNo イベントがトリガーされます。sayNo イベントでは、vue データ内の val 値が no に変更されます。 ブラウザで当社の声明を確認してください。 IV. $親$parent は Vue のインスタンス プロパティであり、現在のコンポーネントの親インスタンスを表します。 親コンポーネントに sayYes というメソッドがある場合は、子コンポーネントで this.$parent.sayYes を直接使用して、親コンポーネント メソッドを呼び出すことができます。 アプリ.vue <テンプレート> <div id="アプリ"> <p>これがアプリコンポーネントです</p> <ホーム></ホーム> <p>値: {{val}}</p> </div> </テンプレート> <スクリプト> './components/Home' から Home をインポートします。 エクスポートデフォルト{ 名前: 'アプリ'、 データ() { 戻る { 値: "デフォルト", } }, コンポーネント: { ホーム }, メソッド: { 言うはい: 関数() { this.val = "はい"; }, いいえと言う: 関数() { this.val = "いいえ"; } } } </スクリプト> 親コンポーネントに sayYes と sayNo という 2 つのメソッドを定義しました。それぞれのロジックは、val の値を yes に変更し、val の値を no に変更します。 次に、子コンポーネントで this.$parent.sayYes と this.$parent.sayNo を使用して、親コンポーネントの対応する sayYes メソッドと sayNo メソッドを呼び出すことができます。 ホーム.vue <テンプレート> <div class="home"> <p>これはホームコンポーネントです</p> <el-button type="primary" v-on:click='btnClickHandler("Yes")'>はい</el-button> <el-button type="primary" v-on:click='btnClickHandler("No")'>いいえ</el-button> </div> </テンプレート> <スクリプト> エクスポートデフォルト{ 名前: 'ホーム'、 メソッド: { btnClickHandler: 関数(パラメータ){ if(パラメータ == "はい"){ this.$parent.sayYes(); }それ以外の場合(パラメータ == "いいえ"){ this.$parent.sayNo(); } } } } </スクリプト> 子コンポーネントの btnClickHandler メソッドのコードが this.$parent に変更されました。 それでは結果を見てみましょう。 V. 結論ここまでで、Vue における親子コンポーネントの通信方式がまとめられ、それぞれ以下の方式がまとめられました。 1つ目: 親コンポーネントが子コンポーネントと通信する - props属性 2番目の方法: 子コンポーネントが親コンポーネントと通信する - $emit メソッド 3番目のタイプ: 子コンポーネントは親コンポーネントと通信します - $parent属性 以上が、Vue を使って親子コンポーネント通信を実現する方法の詳細です。Vue 親子コンポーネント通信の詳細については、123WORDPRESS.COM の他の関連記事に注目してください。 以下もご興味があるかもしれません:
|
<<: CentOS で LibreOffice を使用してドキュメント形式を変換する方法
>>: MySQL 8.0.11 圧縮バージョンを Windows 10 にインストールするための詳細なチュートリアル
この記事の例では、参考のためにjsカスタム右クリックメニューの具体的なコードを共有しています。具体的...
MYSQLの解凍バージョンがインストールされます1: 解凍後、my.ini ファイルをコピーし、バイ...
前回述べた問題を解決するために、オンラインで検索したところ、非常に優れたビジュアル インターフェース...
1. インデックスの役割一般的なアプリケーション システムでは、読み取りと書き込みの比率は約 10:...
<a href="" onclick=""> を...
以下のように表示されます。 table1 を z として更新し、table2 を zb として結合し...
重要なのは、ローカルサーバーに書き込み権限がないことですキーはここにあります(アクセス拒否)。私は肯...
2日前に新しい会社に入社しました。その会社ではIntelli Ideaを使っています。Eclipse...
1. 説明前回は、MySQL のインストールと構成、MySQL ステートメントの使用、MySQL デ...
メタ属性には、name と http-equiv の 2 つがあります。 name 属性は主に、We...
Docker では、ポート マッピングを使用して、Docker コンテナーのサービスをホスト マシン...
db2 データベースをホストマシンに直接インストールするのは面倒で、ユーザーや権限を巻き込むのも不便...
4 つのネットワーク タイプ:なし: コンテナのネットワーク機能を一切設定しません。--net=no...
Harborのインストールは非常に簡単ですが、Dockerログインで行き詰まってしまいました。このブ...
•CSSには多くのセレクターがあります。複数のセレクターを同じ要素に適用するとどうなるでしょうか? ...