Vueコンポーネントで値を渡すにはどのような方法がありますか?

百草
リリース: 2023-06-19 15:33:59
オリジナル
11891 人が閲覧しました

vue コンポーネントが値を渡す方法: 1. 親から子に渡し、それを受け取るために子コンポーネントで "props" を定義します; 2. 子から親に渡し、"$emit()" を使用してトリガーします子コンポーネント内; 3. Brothers Pass 値、イベント バス "eventBus" を定義; 4. 疑問符、コロン、親子コンポーネントを使用して値を渡します; 5. "$ref" を使用して値を渡します; 6. "inject" を使用します" 親コンポーネントのデータを現在のインスタンスに注入します。 7. 祖先から孫へ; 8. 孫から祖先へ; 9. $parent; 10. SessionStorage 値の転送; 11. vuex.

Vueコンポーネントで値を渡すにはどのような方法がありますか?

このチュートリアルのオペレーティング システム: Windows 10 システム、vue バージョン 3.0、Dell G3 コンピューター。

Vueコンポーネントで値を渡すにはどのような方法がありますか?

1. 親コンポーネントを子コンポーネントに渡す

子コンポーネントに props、つまり props を定義します。 ['msg' ]、msg はオブジェクトまたは基本データ型になります。

デフォルト値を定義する場合、つまり props:{msg: {type: String,default: 'hello world' }},

デフォルト値がオブジェクトタイプの場合: props: { msg: { type: Object,default: () => { return { name: 'dan_seek' } } }}

値の転送は一方向であり、親コンポーネントの値を変更することはできません (もちろん参照型を除く)。また、props の値を直接変更すると、警告が表示されます。報告。

推奨される記述方法は、data() で変数を再定義し (Children.vue を参照)、それにプロパティを割り当てることです。もちろん、計算されたプロパティも機能します。

Children.vue

 
ログイン後にコピー

Parent.vue

 
ログイン後にコピー

2. 子コンポーネントを親コンポーネントに渡す

必要なものここで self を使用するには イベントを定義し、this.$emit('myEvent') を使用して子コンポーネントでイベントをトリガーし、@myEvent を使用して親コンポーネントでリッスンします

Children.vue

 
ログイン後にコピー

Parent.vue

 
ログイン後にコピー

3. 兄弟コンポーネント間での値の転送

カスタム イベント エミットのトリガー機能とモニタリング機能を使用してパブリック イベント バスを定義するイベントバスを中間ブリッジとして介して、任意のコンポーネントに値を渡すことができます。また、eventBus を使用することで、emit についての理解を深めることができます。

EventBus.js

import Vue from 'vue' export default new Vue()
ログイン後にコピー

Children1.vue

 
ログイン後にコピー

Children2.vue

 
ログイン後にコピー

Parent.vue

 
ログイン後にコピー

github からも入手可能オープンソースの vue-bus ライブラリは、https://github.com/yangmingshan/vue-bus#readme

4 を参照してください。ルート間での値の受け渡し

i. 値を渡すには疑問符を使用します。

ページ A からページ B にジャンプするときは、this.$router.push('/B?name=danseek')

Page を使用します。 B は this.$route .query.name を使用して、ページ A

#から渡された値を取得できます。ルーターとルートの違いに注意してください

ii。コロンを使用して値を渡します

次のルートを構成します:

{ path: '/b/:name', name: 'b', component: () => import( '../views/B.vue') },
ログイン後にコピー

ページ B では、this.$route.params.name を使用して、ルートによって渡された名前の値を取得できます

iii。値を渡すための親子コンポーネントです。

ルータービューによるものです。これはコンポーネント自体でもあるため、親子コンポーネントの値転送メソッドを使用して値を渡し、プロパティをプロパティに追加することもできます。タイプが更新された後にルートが更新されないため、サブページのマウントされたフックで最新のタイプを直接取得することはできません。代わりに watch を使用してください。

ログイン後にコピー
// 子页面 ...... props: ['type'] ...... watch: { type(){ // console.log("在这个方法可以时刻获取最新的数据:type=",this.type) }, },
ログイン後にコピー

5. $ref を使用して値を渡す

$ref の機能を使用して子コンポーネントの ID を定義すると、親コンポーネントはこの ID を通じて直接アクセスできます。 子コンポーネントのメソッドとプロパティ

最初に子コンポーネント Children.vue

 
ログイン後にコピー

を定義します。次に、親コンポーネント Parent.vue で Children.vue を参照し、ref 属性を定義します。

 
ログイン後にコピー

6. 依存関係の注入を使用して子孫や曾孫に渡す

親コンポーネントにメソッド getName() があり、それを提供する必要があると仮定します。すべての子孫に

provide: function () { return { getName: this.getName() } }
ログイン後にコピー

provide オプションを使用すると、子孫コンポーネントに提供したいデータ/メソッドを指定できます

その後、任意の子孫コンポーネントで、inject を使用して次のデータ/メソッドを注入できます。親コンポーネントを現在のインスタンスに追加します:

inject: ['getName']
ログイン後にコピー

Parent.vue

 
ログイン後にコピー

Children.vue

         
ログイン後にコピー

7、祖先の孫 $attrs

通常は、Transition の中間として父親の props を使用する必要がありますが、この方法では、親コンポーネントの業務に関係のない属性が親コンポーネントにさらに追加され、結合度が高くなります。 $attrs を使用すると簡略化でき、祖先も孫も

#GrandParent.vue

 
ログイン後にコピー

Parent.vue

 
ログイン後にコピー

Children を変更する必要はありません。 vue

 
ログイン後にコピー

結果の表示

親コンポーネントは受け取ります

祖父の名前: grandParent

サブコンポーネントを受け取ります

祖父の名前:

祖父の性別: 男性

祖父の年齢: 88

祖父の趣味: コード

8、孫伝子

$listeners 中間イベントのヘルプを使用すると、Sun は Zu に簡単に通知できます。コード例については、7

9 を参照してください。$parent

親コンポーネント インスタンスは、parent を通じて取得できます。 , そして、このインスタンスを通じて親コンポーネントのプロパティとメソッドにアクセスできます。また、ルート コンポーネントのインスタンスを取得できる兄弟ルートもあります。

構文:

// 获父组件的数据 this.$parent.foo // 写入父组件的数据 this.$parent.foo = 2 // 访问父组件的计算属性 this.$parent.bar // 调用父组件的方法 this.$parent.baz()
ログイン後にコピー

したがって、子コンポーネントを親コンポーネントに渡す例では、this.$parent.getNum(100) を使用して親コンポーネントに値を渡すことができます。 。

10. sessionStorage に値を渡す

sessionStorage 是浏览器的全局对象,存在它里面的数据会在页面关闭时清除 。运用这个特性,我们可以在所有页面共享一份数据。

语法:

// 保存数据到 sessionStorage sessionStorage.setItem('key', 'value'); // 从 sessionStorage 获取数据 let data = sessionStorage.getItem('key'); // 从 sessionStorage 删除保存的数据 sessionStorage.removeItem('key'); // 从 sessionStorage 删除所有保存的数据 sessionStorage.clear();
ログイン後にコピー

注意:里面存的是键值对,只能是字符串类型,如果要存对象的话,需要使用 let objStr = JSON.stringify(obj) 转成字符串然后再存储(使用的时候 let obj = JSON.parse(objStr) 解析为对象)。

这样存对象是不是很麻烦呢,推荐一个库 good-storage ,它封装了sessionStorage ,可以直接用它的API存对象

// localStorage storage.set(key,val) storage.get(key, def) // sessionStorage storage.session.set(key, val) storage.session.get(key, val)
ログイン後にコピー

更多请移步:https://github.com/ustbhuangyi/storage#readme

11、vuex

这里我也不打算介绍这个大名鼎鼎的vuex怎么用,因为要把它写清楚篇幅太长了…

如果您不打算开发大型单页应用,使用 Vuex 可能是繁琐冗余的。确实是如此——如果您的应用够简单,您也许不需要使用 Vuex。

以上がVueコンポーネントで値を渡すにはどのような方法がありますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。