序文: 親コンポーネントと子コンポーネント間でデータを渡す場合、通常は props と emitting を使用します。親から子にデータを渡す場合は props を使用します。親コンポーネントが孫コンポーネントに渡す場合は、まず子コンポーネントに渡し、次に子コンポーネントが孫コンポーネントに渡す必要があります。子コンポーネントが複数ある場合や孫コンポーネントが複数ある場合は、何度も渡す必要があり、非常に面倒になります。 このような場合、 1. Vue2でのprovide / injectの使用provide: はプロパティと値を含むオブジェクトです。のように: 提供する:{ 情報:"値" } 提供する(){ 戻る { 情報: this.msg } } 挿入: [ 'info' ] 上記の provide によって提供される情報データを受け取ります。これは、from 属性と default 属性を含むオブジェクトにすることもできます。From は、挿入されたコンテンツで検索するために使用されるキーであり、default 属性はデフォルト値を指定するためのものです。 vue2 プロジェクト/注入アプリケーションの場合: //親コンポーネントエクスポートデフォルト{ 提供する:{ info:"データを提供する" } } //サブコンポーネントエクスポートデフォルト{ 挿入:['情報'], マウントされた(){ console.log("データの受信:", this.info) // データの受信: データの提供} } 2. Vue3でのprovide / injectの使用結合された provide 関数は次の 2 つのパラメータを受け取ります。
使用する場合: 「vue」から{provide}をインポートします エクスポートデフォルト{ 設定(){ provide('情報',"値") } } inject 関数は次の 2 つのパラメータを取ります。
使用する場合: 「vue」からインポートします。 エクスポートデフォルト{ 設定(){ inject('info',"デフォルト値を設定") } } 完全な例 1 : //親コンポーネントコード <script> 「vue」から{provide}をインポートします エクスポートデフォルト{ 設定(){ provide('情報',"値") } } </スクリプト> //サブコンポーネントコード <テンプレート> {{情報}} </テンプレート> <スクリプト> 「vue」からインポートします。 エクスポートデフォルト{ 設定(){ const info = inject('info') 戻る { 情報 } } } </スクリプト> 3. 応答性を高める
完全な例2 : レスポンシブ //親コンポーネントコード <テンプレート> <div> 情報:{{info}} <InjectCom></InjectCom> </ ... </div> </テンプレート> <スクリプト> InjectCom を「./InjectCom」からインポートします。 "vue" から { provide,readonly,ref } をインポートします。 エクスポートデフォルト{ 設定(){ let info = ref("今日は勉強しましたか?") タイムアウトを設定します(()=>{ info.value = "言い訳をしないで、今すぐ学び始めましょう" },2000) 提供する('情報',情報) 戻る { 情報 } }, コンポーネント:{ インジェクトコム } } </スクリプト> // InjectCom サブコンポーネント コード <テンプレート> {{情報}} </テンプレート> <スクリプト> 「vue」からインポートします。 エクスポートデフォルト{ 設定(){ const info = inject('info') タイムアウトを設定します(()=>{ info.value = "更新" },2000) 戻る { 情報 } } } </スクリプト> 上記の例では、親コンポーネントと子コンポーネントの両方で サブスクリプションコンポーネント内で値を変更する場合は、正常に変更できます。他のコンポーネントでも値を使用すると状態が混乱する可能性があるため、発生源で問題を回避する必要があります。 方向: 「vue」から読み取り専用をインポートします let info = readonly('読み取り専用情報値') タイムアウトを設定する(()=>{ info="情報を更新" // 2秒後に情報の値を更新します},2000) 2 秒間実行した後、ブラウザは情報値を変更できないことを示す警告を発します。 そのため、プロバイダーによって発行されたデータに変更が加えられないように、読み取り専用属性を 完全な例 2 に readonly を追加します。 提供('info'、読み取り専用(info)) サブコンポーネントが値を変更すると、読み取り専用のリマインダーが表示されます。 値を変更する場合、公開されたデータ のように: //公開 let info = ref("今日は勉強しましたか?") 定数changeInfo = (val)=>{ 情報値 = val } 提供('情報'、読み取り専用(情報)) 提供する('changeInfo',changeInfo) //サブスクリプション const chang = inject('changeInfo') chang('フロントエンドエンジニアに急ぐ') 完全な例3:データの変更
// 親コンポーネントコード <テンプレート>
<div>
情報:{{info}}
<InjectCom></InjectCom> </ ...
</div>
</テンプレート>
<スクリプト>
InjectCom を "./InjectCom" からインポートします。
"vue" から { provide,readonly,ref } をインポートします。
エクスポートデフォルト{
設定(){
let info = ref("今日は勉強しましたか?")
定数changeInfo = (val)=>{
情報値 = val
}
提供('情報'、読み取り専用(情報))
提供する('changeInfo',changeInfo)
戻る {
情報
}
},
コンポーネント:{
インジェクトコム
}
}
</スクリプト>
//InjectCom サブコンポーネント コード <テンプレート>
<div>
<button @click="chang('フロントエンドエンジニアに急ぐ')">値を更新</button>
</div>
</テンプレート>
<スクリプト>
「vue」からインポートします。
エクスポートデフォルト{
設定(){
const info = inject('info')
const chang = inject('changeInfo')
戻る {
情報、
チャン
}
}
}
</スクリプト>
これで、 以下もご興味があるかもしれません:
|
>>: スタイリッシュなウェブページデザインを作成する方法(グラフィックチュートリアル)
4 つのネットワーク タイプ:なし: コンテナのネットワーク機能を一切設定しません。--net=no...
目次主キー制約ユニーク制約主キー制約PRIMARY KRY 主キーは一意です。テーブルには主キーを ...
実際、この効果を実現するのは非常に簡単で、この効果は特殊効果と呼ぶことすらできません。次のコードを ...
序文:この記事では主に、MySQL の where、group by、order by、limit、...
1. 問題Linux 上の mysql5.7 のパスワードを忘れました2. 解決策• ステップ 1:...
モチベーション学習の必要性から、海外のサーバーメーカー(どこのメーカーかは言いません)のVPSサービ...
MySQLとElasticsearch間のデータ非対称性問題の解決策jdbc-input-plugi...
gzip は、Linux システムでファイルの圧縮と解凍によく使用されるコマンドです。このコマンドで...
目次1. sysbenchの紹介#プロジェクトダウンロードアドレス: 2. Sysbenchのインス...
目次1. MySQL論理アーキテクチャの概要2. コネクタクエリキャッシュ4. パーサー5. オプテ...
並べ替えの場合、order by は非常に頻繁に使用するキーワードです。インデックスに関するこれまで...
この記事では、MySQLのインストールと設定のリモートログインチュートリアルを参考までに紹介します。...
目次FTP、FTPS、SFTP の概要FTP FTPS FTPサーバーFTPソフトウェアのアクティブ...
私はこのようなバグを典型的な「ハムレット」バグと呼んでいます。これは、「エラーメッセージは同じだが、...
最近、ストアド プロシージャの名前を変更する機能を使用しました。インターネットで情報を検索しましたが...