vue 3 のコンポーネントからサブコンポーネントにデータを送信する
P粉481815897
P粉481815897 2023-09-01 17:12:52
0
1
630
<p>親コンポーネント <code>formTelemarketing</code> から子コンポーネント <code>nAsignedCalls</code> にデータを送信してこれを実行しようとしています。親コンポーネント < ;code> props で prop を実行します: { register: Number },</code> 送信ボタン (送信ボタンではなく) をクリックすると、フォームにデータが入力されるはずで、アクション ボタンは関数 <code>searchRegisters< を呼び出します。 /code> フォームから値を取得し、$emit を使用して prop をコンポーネントに送信します</p> <pre class="brush:php;toolbar:false;">this.$emit("registers", getCall(toRef(param_search,'param_search')))</pre> <p>親コンポーネント内に含まれる子コンポーネントには次のものがあります: </p> <pre class="brush:php;toolbar:false;"><div id="app5"> <nAssignedCalls @registers="getCall"></nAsignedCalls> </div></pre> <p>エクスポートのデフォルト子コンポーネントには props:['register'] があり、テーブル内のこのコンポーネントには、このプロパティからすべてのデータを取得する for-each があります...I にエラーは表示されません。コンソールにアクセスしてもデータを表示できません</p> <pre class="brush:php;toolbar:false;">{{ (登録) ? 登録 : "vacio" }} <template v-for="登録項目"> <tr> <td>{{ item.id }}</td> <td>{{ (item.name) ? item.name : '' }} </td></pre> <p>たとえば、これは私の構造です。登録が完了したかどうかを知る条件があり、常に「vacio」を返します。</p> <p>これは子コンポーネントの props 定義です: </p> <pre class="brush:php;toolbar:false;">デフォルトの定義コンポーネントをエクスポート({ 名前: 'nAssignedCalls', props:['register'],</pre> <p>私の API は問題ありません。コンソールの [ネットワーク] タブに応答 [ok] が表示されます <code>{"data":[{"id":895,"name":"Aguilera Muriel Fatimas",< ;/ code> さらにデータがあります...</p> <p>Vue は初めてなので、何が間違っているのかわかりません...</p> <p>レビューありがとうございます。私の下手な英語でごめんなさい</p> <p><strong>アップデート</strong></p> <p>まず、プロジェクトでコンポジション API を使用します。 </p> <p>次に、子コンポーネントでイベントを定義します</p> <pre class="brush:php;toolbar:false;">// パーソナライズされたイベント const EmitMyEvent = (event) => Emit('registers',event); 戻る { 取り除く、 検索ID、 検索名、 検索電話、 編集、 結果の取得、 ページの取得、 エミットマイイベント、 getCall }</pre> <p>app.js で、app5 を再定義しました: </p> <pre class="brush:php;toolbar:false;">const app5 = createApp({ コンポーネント:{ n割り当てられた通話 }、 設定() { const getCall = (event) => console.log('getCall(): 'event.target.id); 戻り値 { getCall } } }) app5.mount('#app5')</pre> <p>しかし、ボタンをクリックしても、Web またはコンソールに何も表示されません</p> <p><strong>私のボタン: </strong></p> <pre class="brush:php;toolbar:false;"><input type="button" class="btn btn-dark" value="Buscar registros" @click="searchRegisters() "></pre> <p>親コンポーネントですべてをスクリプト化して、ボタンをクリックして関数を呼び出します。</p> <p>使用父組案内のすべての代コード更新我的题:</p> <pre class="brush:php;toolbar:false;"><テンプレート> <div class="コンテナ mt-3 bg-白シャドウ丸め p-3"> <div class="row justify-content-start mt-4""" <div class="col-md-6ml-3"" <div class="フォームグループ"> <div class="row justify-content-center"> <select class="フォームコントロール"名前=「遠隔操作者」 id="teleoperator_select" placeholder="テレオペラドラ"> <option hidden>テレオペラドラ</option> </選択> </div> </div> </div> </div> <div class="row justify-content-start align-items-center mt-4">
<div class="フォームアイテム"> <入力タイプ="テキスト"名前=「住所」 id="アドレス"必須> <label for="address">方向</label> </div> </div>
<div class="フォームアイテム"> <入力タイプ="テキスト"名前=「都市」 id="都市"必須> <label for="city">シウダード</label> </div> </div>
<div class="フォームアイテム"> <入力タイプ="テキスト"名前=「cp」 id="郵便番号"必須> <label for="postal_code">Código Postal</label> </div> </div> </div> <div class="row justify-content-center"> <入力タイプ=「ボタン」 class="btn btn-dark" value="バスカーレジストロ" @click="searchRegisters"> </div> </div> <div class="コンテナ mt-3 bg-white シャドウ丸め p-3 "> <div class="row justify-content-center">
<ul class="nav nav-pills"> <li class="nav-item"> <a class="ナビゲーションリンクがアクティブ"データトグル=「タブ」 href="#nasigned">割り当てはありません</a> </li> <li class="nav-item"> <a class="ナビゲーションリンク"データトグル=「タブ」 href="#assigned">アサインダス</a> </li> </ul> </div> <div クラス = "コンテナ" style="幅: 95% !重要;"> <div class="タブコンテンツ"> <div class="タブペインのフェードイン" id="割り当て済み"> <div id="app4"> <assignedCalls></assignedCalls> </div> </div> <div class="タブペインのフェードインがアクティブになっています" id="署名済み"> <div id="app5"> <nAssignedCalls @registers="getCall"></nAsignedCalls> </div> </div> </div> </div> </div> </div> </テンプレート> <スクリプト> import { onMounted,defineComponent,toRef } from 'vue'; useNregister を '../composables/ncalls' からインポートします 「./roomBooss/assignedCalls」からassignedCallsをインポートします。 './roomBooss/nasignedCalls' から nAssignedCalls をインポートします。 デフォルトのエクスポートdefineComponent({ コンポーネント: {assignedCalls、nAssignedCalls}、 データ(){ 戻る{ アイテム: []、 ページネーション: { 現在のページ: 1、 }、 レジスタ: 0、 } }、 小道具: { レジスタ: 数値 }、 setup(props, { 出力 }, context) { const EmitMyEvent = (イベント) => Emit('レジスタ', イベント); var param_search = {}; const { getCall、deleteCalls、queryForKeywords、getResults、getItems } = useNregister() 関数削除(id) { 削除呼び出し(id) } 関数 searchId(アクション) { let id = document.getElementsByClassName('id_search')[0].value const params = [アクション, ID]; queryForKeywords(パラメータ) } 関数検索名(アクション) { let id = document.getElementsByClassName('name_search')[0].value const params = [アクション, ID]; queryForKeywords(パラメータ) } 関数 searchPhone(アクション) { let id = document.getElementsByClassName('phone_search')[0].value const params = [アクション, ID]; queryForKeywords(パラメータ) } 関数編集(アクション) { window.location.href = '/roomboss/telemarketing/call/' アクション "/edit"; } 関数 show(アクション) { window.location.href = '/roomboss/telemarketing/call/' アクション; } 関数 getPage(ページ){ getItems(ページ); } 関数 searchRegisters(){ var アドレス = ""; var city = ""; var cp = ""; アドレス = document.getElementById("アドレス").value if( アドレス != "" ) { param_search["パラメータ"] = "アドレス"; param_search["値"] = アドレス; } city = document.getElementById("city").value if( 都市 != "" ) { param_search["パラメータ"] = "都市"; param_search["値"] = 都市; }cp = document.getElementById("郵便番号").value if( cp != "" ) { param_search["パラメータ"] = "cp"; param_search["値"] = cp } context.emit("レジスタ", getCall(toRef(param_search,'param_search'))) } 戻る { 取り除く、 検索ID、 検索名、 検索電話、 編集、 見せる、 結果の取得、 ページの取得、 getCall、 検索登録、 エミットマイイベント } } }) </script></pre> <p><strong>アップデート</strong></p> <p>送信したデータはネットワーク タブに表示されますが、テーブルは空です</p> <pre class="brush:php;toolbar:false;"><tbody> <template v-for="レジスタの項目"> <tr> <td>{{ item.id }}</td> <td>{{ (アイテム名) ? アイテム名 : '' }} </td> <td>{{ (アイテム.アドレス) ? アイテム.アドレス : ''}}</td> <td>{{ (item.province) ? item.province : ''}} </td> <td>{{ (item.city) ? item.city : ''}} </td> <td>{{ (item.cp) ? item.cp : ''}} </td> <td>{{ (item.phone) ? item.phone : ''}} </td> <td> <span class="text-light" :class="item.status.class_span"> {{ (アイテム) ? item.status.name : 'null' }} </span> </td> <td> <div class="ホバーテキスト"> <div class="アイコンアクション"> <div class="row justify-content-center"> <div class="col-md-6 offset-md-1"" <i class="fas fa-cog"</i> </div> </div> </div> <div class="コンテナアクション">
<ボタンクラス="ツールチップテキストボタン" id=「編集」 @click="edit(item.id)"><i class="fas fa-2x fa-edit"></i></button> </div> </div> </div> </td> </tr> </テンプレート> </tbody></pre> <p>コンポーネント <code>nAsignedCalls</code> のスクリプト、for および <code>emitMyEvent</code> および <code>newRegisters</code> レジスタ</で <code> を使用してみましたコード></p>> <pre class="brush:php;toolbar:false;"><script> useNregister を '../../composables/ncalls' からインポートします import { onMounted,defineComponent } from 'vue' デフォルトのエクスポートdefineComponent({ 名前: 'nAssignedCalls', 発行: ['レジスタ'], データ(){ 戻る{ アイテム: []、 ページネーション: { 現在のページ: 1、 }、 newRegisters: Object.assign({}, this.registers), } }、 setup(props, { 出力 }) { const { getCall、deleteCalls、queryForKeywords、getResults、getItems } = useNregister() 関数削除(id) { 削除日付(id) } 関数 searchId(アクション) { let id = document.getElementsByClassName('id_search')[0].value const params = [アクション, ID]; queryForKeywords(パラメータ) } 関数検索名(アクション) { let id = document.getElementsByClassName('name_search')[0].value const params = [アクション, ID]; queryForKeywords(パラメータ) } 関数 searchPhone(アクション) { let id = document.getElementsByClassName('phone_search')[0].value const params = [アクション, ID]; queryForKeywords(パラメータ) } 関数編集(アクション) { window.location.href = '/roomboss/calls/' アクション "/edit"; } 関数 getPage(ページ){ getItems(ページ); } //パーソナライズされたイベント const EmitMyEvent = (event) => Emit('registers',event); 戻る { 取り除く、 検索ID、 検索名、 検索電話、 編集、 結果の取得、 ページの取得、 エミットマイイベント、 getCall } } }); </script></pre></p>
P粉481815897
P粉481815897

全員に返信(1)
P粉916553895

アップデート 2

setup() 関数では、Composition API

を使用する必要があります。

Composition API を使用すると、setup() の emit 関数を取得できます。 。 org/api/composition-api-setup.html#setup-context" rel="nofollow noreferrer">コンテキストのセットアップ.

最初の例を確認してください:

あなたは emit 関数を取得します

リーリー

その後、直接使用します

リーリー

あなたの場合、セットアップコンテキストを渡したので、context 経由で emit

を呼び出すことができます。 リーリー

カスタム イベントを定義する必要はないようですが、それでも定義することをお勧めします。

リーリー

this.$emit() 呼び出しは、Composition API ではなく、Options API

によって使用されることに注意してください。

リーリー リーリー リーリー

更新

this.$emit を使用した Options API と同じ

リーリー リーリー リーリー
いいねを押す +0
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート