1. 親コンポーネントと子コンポーネント親コンポーネントと子コンポーネントが何であるかがわからないことがよくあります。簡単にまとめると、コードの一部をコンポーネントにカプセル化し、このコンポーネントを別のコンポーネントに導入します。カプセル化されたコンポーネントを導入するファイルは親コンポーネントと呼ばれ、導入されるコンポーネントは子コンポーネントと呼ばれます。 具体的なコードは次のとおりです。 <div id="アプリ"> <コンポーネント2></コンポーネント2> </div> <スクリプト> // グローバル登録 Vue.component("component1", { テンプレート: ` <div> <h2>こんにちは</h2> </div> ` }) constアプリ = 新しいVue({ el: "#app", データ: { メッセージ: 「こんにちは」 }, コンポーネント: // ローカル登録 "component2": { テンプレート: ` <div> <コンポーネント1></コンポーネント1> <h2>世界</h2> </div> `、 } } }) </スクリプト>
最後に、HTML でコンポーネント テンプレートコードは次のとおりです。 <div> <コンポーネント-1></コンポーネント-1> <h2>世界</h2> </div> コンポーネント <div> <div> <h2>こんにちは</h2> </div> <h2>世界</h2> </div> したがって、ブラウザに表示される効果は次のようになります。
結果: 2. テンプレート分離書き込み上記のコンポーネントを作成した際、コンポーネント内に 1. テンプレートタグコンポーネントに元々記述されている <テンプレートid="component2"> <div> <コンポーネント1></コンポーネント1> <h2>世界</h2> </div> </テンプレート> 次に、コンポーネント内で、元の コンポーネント: // ローカル登録 "component2": { テンプレート: `#component2`, } } この書き方を推奨する 2. テキスト/xテンプレート上記に似た別の書き方もあります。上記では 次のように: <script type="text/x-template" id="component2"> <div> <コンポーネント1></コンポーネント1> <h2>世界</h2> </div> </スクリプト> 3. 親子コンポーネント通信 - 親子親コンポーネントと子コンポーネントを作成するときに、子コンポーネントも親コンポーネントと同じデータを取得したい場合、1 つの方法は、データを取得するためにインターフェイスをバックグラウンドに送信することですが、これはサーバーに負担をかけるため、2 番目の方法として、 <div id="アプリ"> <test1 :cmovies="映画"></test1> </div> <テンプレートid="test1"> <div> <ul> <li v-for="cmovies 内のアイテム">{{item}}</li> </ul> </div> </テンプレート> <スクリプト> constアプリ = 新しいVue({ el: "#app", データ: { 映画:[「ワンピース」、「海爾兄弟」、「海王類」] }, コンポーネント: "テスト1": { テンプレート: `#test1`, 小道具: ['cmovies'], データ(){ 戻る{} }, } } }) </スクリプト> ここでは、 最後に、ムービー内のムービーを Web ページに表示できます。 上記のページに示されている順序なしリストでは、子コンポーネントを使用しています。データは親コンポーネントの 1. プロップタイプ上記の例では、親コンポーネントからデータを受け取るための配列として
例: // シンプルな構文 Vue.component('props-demo-simple', { プロパティ: ['size', 'myMessage'] }) // 検証を提供するオブジェクト構文 Vue.component('props-demo-advanced', { 小道具: { // 検出タイプの高さ: 数値、 // 検出タイプ + その他の検証年齢: { タイプ: 数値、 デフォルト: 0, 必須: true、 バリデータ: 関数 (値) { 戻り値 >= 0 } } } }) 注意: 4. 親子コンポーネント通信子から親へのシナリオでは、子コンポーネントは通常、イベントを親コンポーネントに渡してリッスンし、ユーザーがどのボタンをクリックしたかを親コンポーネントに伝えます。使用される関数は$emitです。 1. vm.$emit( イベント名、[…引数] )パラメータ:
現在のインスタンスでイベントをトリガーします。追加のパラメータはリスナー コールバックに渡されます。 例: <div id="アプリ"> <test1 @item-click="cpnClick"></test1> </div> <テンプレートid="test1"> <div> <button v-for="カテゴリ内のアイテム" @click="btnClick(item)">{{item.name}}</button> </div> </テンプレート> <スクリプト> constアプリ = 新しいVue({ el: "#app", データ: { メッセージ: 「こんにちは」 }, メソッド: { cpnClick(アイテム){ console.log("成功", 項目) } }, コンポーネント: // ローカル登録コンポーネント test1 "テスト1": { データ(){ 戻る { カテゴリー: [ {id: "aaa", name: "ホットなおすすめ"}, {id: "bbb", 名前: "モバイルデジタル"}, {id: "ccc", name: "家電製品"}, {id: "ddd", 名前: "食品・飲料"}, ] } }, メソッド: { btnClick(アイテム){ this.$emit("item-click", item) } }, テンプレート: `#test1` } } }) </スクリプト> 上記のコードは、 コンソールによって出力されるログにはサブコンポーネントの 5. 親子コンポーネント通信 - 双方向バインディングケースと組み合わせる次の例では、親から子、子から親、および 1. 基本的なテンプレートコード<div id="アプリ"> <cpn :number1="num1" :number2="num2"></cpn> </div> <テンプレートid="cpn"> <div> <h2>{{番号1}}</h2> <h2>{{数値2}}</h2> </div> </テンプレート> <スクリプト> constアプリ = 新しいVue({ el: "#app", データ: { 数値1: 0, 数値2: 1, }, コンポーネント: // サブコンポーネント cpn を定義する "cpn": { テンプレート: `#cpn`, 小道具: { 数値1: 数値、 数値2: 数値、 } } }, }) </スクリプト> コードは次のことを行います
最終的なページ表示効果は次のとおりです。
2. 双方向バインディングを追加する上記のテンプレートに基づいて、双方向バインディングを追加し、 <テンプレートid="cpn"> <div> <h2>小道具:{{number1}}</h2> <input type="text" v-model="number1"> <h2>小道具:{{number2}}</h2> <input type="text" v-model="number2"> </div> </テンプレート> 上記のコードは双方向バインディングを完了しますが、エラー警告が表示されます。 子コンポーネントで <テンプレートid="cpn"> <div> <h2>データ:{{dnumber1}}</h2> <input type="text" v-model="dnumber1"> <h2>データ:{{dnumber2}}</h2> <input type="text" v-model="dnumber2"> </div> </テンプレート> データ(){ 戻る { dnumber1: this.number1, dnumber2: this.number2, } },
3. 逆バインディング上記の考え方に従うと、 完全なコードは次のとおりです。 <div id="アプリ"> <cpn :number1="num1" :number2="num2" @num1change="num1change" @num2change="num2change"></cpn> </div> <テンプレートid="cpn"> <div> <h2>小道具:{{number1}}</h2> <h2>データ:{{dnumber1}}</h2> <ラベル> <input type="text" :value="dnumber1" @input="num1Input"> </ラベル> <h2>小道具:{{number2}}</h2> <h2>データ:{{dnumber2}}</h2> <ラベル> <input type="text" :value="dnumber2" @input="num2Input"> </ラベル> </div> </テンプレート> <スクリプト> constアプリ = 新しいVue({ el: "#app", データ: { 数値1: 0, 数値2: 1, }, メソッド: { num1変更(値){ this.num1 = parseInt(値) }, num2change(値){ this.num2 = parseInt(値) }, }, コンポーネント: // サブコンポーネント cpn を定義する "cpn": { テンプレート: `#cpn`, 小道具: { 数値1: 数値、 数値2: 数値、 }, データ(){ 戻る { dnumber1: this.number1, dnumber2: this.number2, } }, メソッド: { num1Input(イベント){ // 1. 入力の値をdnumberに代入します。this.dnumber1 = event.target.value // 2. 親コンポーネントが値を変更するには、イベントを発行する必要があります this.$emit("num1change", this.dnumber1) }, num2Input(イベント){ // 1. 入力の値をdnumberに代入します。this.dnumber2 = event.target.value // 2. 親コンポーネントが値を変更するには、イベントを発行する必要があります this.$emit("num2change", this.dnumber2) } } } }, }) </スクリプト> 効果は以下のとおりです。 6. コンポーネントの親アクセスから子アクセス親コンポーネントで子コンポーネントの関数または属性値を使用する必要がある場合は、 <div id="アプリ"> <cpn ref="aaa"></cpn> <button @click="btnClick">ボタン</button> </div> <テンプレートid="cpn"> <div> 私は子コンポーネントです</div> </テンプレート> <script src="../js/vue.js"></script> <スクリプト> constアプリ = 新しいVue({ el: "#app", データ: { メッセージ: 「こんにちは」 }, メソッド: { btnClick(){ console.log(this.$refs.aaa.name) this.$refs.aaa.showMessage() } }, コンポーネント: "cpn": { テンプレート: `#cpn`, データ(){ 戻る { name: 「私はサブコンポーネントの名前です」 } }, メソッド: { 表示メッセージ(){ console.log("メッセージを表示") } } } } }) </スクリプト> 上記のコードは以下のことを行います
これで、Vue の子コンポーネントと親コンポーネントの詳細な分析に関するこの記事は終了です。より関連性の高い Vue の子コンポーネントと親コンポーネントについては、123WORDPRESS.COM の以前の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。 以下もご興味があるかもしれません:
|
<<: W3C チュートリアル (14): W3C RDF および OWL アクティビティ
>>: CSSスクロールバーのスタイルをカスタマイズする方法の詳細な説明
目次1. 現実的な背景2. 合意3. マスターを構成する3.1. 起動パラメータの設定3.2. パラ...
1. Dockerのホスト間通信Docker クロスホスト ネットワーク ソリューションには以下が含...
目次MYSQL メタデータ ロック (MDL ロック) 学習理論とロック タイプ テスト1. 予備的...
forループ基本的な構文形式: for(変数の初期化; 条件式; 演算式){ループ本体ステートメント...
文章のスタイルでは、このような状況がよく見られます コードは次のとおりです <div styl...
目次依存関係をインストールする構成使用1.アイコン検索ページに入る2. 使用したいアイコンの英語名を...
1. ネットワーク接続方法がブリッジされていることを確認する物理ネットワーク接続ステータスのコピーを...
本日、会社の内部サーバーにログインしたところ、リモートアクセスができませんでした。エラー メッセージ...
スクロールバーのデフォルトスタイルを変更する必要があるプロジェクトを多数作成しましたが、プラグインを...
まず設定ファイルがどこにあるか調べる nginx.confはどこにありますかこれらのディレクトリを調...
Linux で Ctrl+c、Ctrl+d、Ctrl+z はどういう意味ですか? Ctrl+c と ...
使用シナリオ:プロジェクトのページでは、頻繁に変更されず、個別のカスタマイズも伴わない大量のデータを...
この記事の例では、要素UIテーブルにドロップダウンフィルタリングを実装するための具体的なコードを参考...
innodb_autoinc_lock_mode パラメータは、auto_increment 列を持...
1. 何ですか視差スクロールとは、複数の背景レイヤーを異なる速度で動かすことで、3次元のモーション...