vue コンポーネントで値を渡す方法: 1. 父から息子に渡す; 2. 息子から父に渡す; 3. 兄弟から値を渡す; 4. 疑問符、コロン、親を使用して値を渡す子コンポーネント; 5. " $ref" を使用して値を渡します; 6. "inject" を使用して親コンポーネントのデータを現在のインスタンスに注入します; 7. 先祖から孫へ渡す; 8. 孫から先祖へ渡す; 9 . $parent; 10. sessionStorage に値を渡します; 11. vuex。
1. 親コンポーネントを子コンポーネントに渡す
子コンポーネントに props、つまり props:['msg を定義します。 '], msg オブジェクトまたは基本データ型にすることができます
デフォルト値を定義する場合、つまり props:{msg: {type: String,default: 'hello world'}} ,
If デフォルト値はオブジェクト タイプです: props: { msg: { type: Object,default: () => { return { name: 'dan_seek' } } }}
このタイプの値の受け渡しは一方向であり、親コンポーネントの値を変更することはできません (もちろん参照型を除く); props の値を直接変更すると、警告が報告されることに注意してください。 。
推奨される記述方法は、data() で変数を再定義し (Children.vue を参照)、それにプロパティを割り当てることです。もちろん、計算されたプロパティも機能します。
Children.vue
<template> <section> 父组件传过来的消息是:{{myMsg}} </section> </template> <script> export default { name: "Children", components: {}, props:['msg'], data() { return { myMsg:this.msg } }, methods: {} } </script>
Parent.vue
<template> <div class="parent"> <Children :msg="message"></Children> </div> </template> <script> import Children from '../components/Children' export default { name: 'Parent', components: { Children }, data() { return { message:'hello world' } }, } </script>
2. 子コンポーネントを親コンポーネントに渡します
ここではカスタム イベントを使用する必要があります。子コンポーネント内で this.$emit('myEvent') を使用してトリガーし、@myEvent を使用して親コンポーネントをリッスンします
Children.vue
<template> <section> <br> <div @click="clickme">click me</div> </section> </template> <script> export default { name: "Children", components: {}, data() { return { childNum:0 } }, methods: { clickme(){ // 通过自定义事件addNum把值传给父组件 this.$emit('addNum',this.childNum++) } } } </script>
Parent.vue
<template> <div class="parent"> 这里是计数:{{parentNum}} <Children-Com @addNum="getNum"></Children-Com> </div> </template> <script> import ChildrenCom from '../components/Children' export default { name: 'Parent', components: { ChildrenCom }, data() { return { parentNum: 0 } }, methods:{ // childNum是由子组件传入的 getNum(childNum){ this.parentNum = childNum } } } </script>
3, 兄弟コンポーネント間での値の受け渡し
カスタム イベント発行のトリガー機能とモニタリング機能を使用して、パブリック イベント バスのeventBus を定義します。中間ブリッジとしてそれを介して、値を渡すことができます。任意のコンポーネントに。また、eventBus を使用することで、emit についての理解を深めることができます。
EventBus.js
import Vue from 'vue'export default new Vue() Children1.vue <template> <section> <div @click="pushMsg">push message</div> <br> </section></template><script> import eventBus from './EventBus' export default { name: "Children1", components: {}, data() { return { childNum:0 } }, methods: { pushMsg(){ // 通过事件总线发送消息 eventBus.$emit('pushMsg',this.childNum++) } } }</script>
Children2.vue
<template> <section> children1传过来的消息:{{msg}} </section> </template> <script> import eventBus from './EventBus' export default { name: "Children2", components: {}, data() { return { msg: '' } }, mounted() { // 通过事件总线监听消息 eventBus.$on('pushMsg', (children1Msg) => { this.msg = children1Msg }) } } </script>
Parent.vue
<template> <div class="parent"> <Children1></Children1> <Children2></Children2> </div> </template> <script> import Children1 from '../components/Children1' import Children2 from '../components/Children2' export default { name: 'Parent', components: { Children1, Children2 }, data() { return { } }, methods:{ } } </script>
github にはオープンソースの vue-bus ライブラリもあります。以下で参照できます : https://github.com/yangmingshan/vue-bus#readme
4. ルート間で値を渡す
i. 値を渡すには疑問符を使用します
ページジャンプ ページ B を使用する場合、this.$router.push('/B?name=danseek')を使用します。
ページ B は this.$route.query.name を使用してページ A から渡された値
上記のルーターとルートの違いに注意してください
ii. コロンを使用して値を渡します
#次のルートを構成します:{ path: '/b/:name', name: 'b', component: () => import( '../views/B.vue') },ページ B では、this.$route.params .name を渡して、ルートによって渡された名前の値を取得できます
#iii。値を渡すには親子コンポーネントを使用します
router-view 自体もコンポーネントであるため、親子コンポーネントを使用して値を渡し、対応するサブページに props を追加することもできます。タイプが更新された後、ルートは更新されないため、サブページのマウントされたフックで最新の型値を直接取得することはできませんが、watch を使用します。
<router-view :type="type"></router-view> // 子页面 ...... props: ['type'] ...... watch: { type(){ // console.log("在这个方法可以时刻获取最新的数据:type=",this.type) }, },
5. $ref を使用して値を渡す
$ref の機能を使用して、サブコンポーネントの ID を定義します。親コンポーネントは、メソッドやメソッドに直接アクセスできます。属性
最初に子コンポーネントChildren.vue
<template> <section> 传过来的消息:{{msg}} </section> </template> <script> export default { name: "Children", components: {}, data() { return { msg: '', desc:'The use of ref' } }, methods:{ // 父组件可以调用这个方法传入msg updateMsg(msg){ this.msg = msg } }, } </script>
を定義してから、親コンポーネントParent.vue内でChildren.vueを参照し、ref属性
<template> <div class="parent"> <!-- 给子组件设置一个ID ref="children" --> <Children ref="children"></Children> <div @click="pushMsg">push message</div> </div> </template> <script> import Children from '../components/Children' export default { name: 'parent', components: { Children, }, methods:{ pushMsg(){ // 通过这个ID可以访问子组件的方法 this.$refs.children.updateMsg('Have you received the clothes?') // 也可以访问子组件的属性 console.log('children props:',this.$refs.children.desc) } }, } </script>#を定義します。 ##6. 依存関係を使用する 子孫と曾孫への注入親コンポーネントにメソッド getName() があり、それをすべての子孫に提供する必要があると仮定します
provide: function () { return { getName: this.getName() } }provide オプションを使用すると、次のことが可能になります。子孫コンポーネントに提供するものを指定します。データ/メソッドその後、任意の子孫コンポーネントで、inject を使用して、親コンポーネントのデータ/メソッドを現在のインスタンスに注入できます。
inject: ['getName']Parent.vue
<template> <div class="parent"> <Children></Children> </div> </template> <script> import Children from '../components/Children' export default { name: 'Parent', components: { Children, }, data() { return { name:'dan_seek' } }, provide: function () { return { getName: this.name } }, } </script>Children.vue
7, Ancestral grandson$attrs通常、中間トランジションとして父親の小道具を使用する必要がありますが、この方法では, 親コンポーネントには、親コンポーネントのビジネスとは何の関係もないものがさらに含まれます。属性 (高結合) は、$attrs を使用して簡略化でき、祖先も孫も変更する必要はありませんGrandParent.vue父组件传入的值:{{getName}} <script> export default { name: "Children", components: {}, data() { return { } }, inject: [&#39;getName&#39;], } </script>
<template> <section> <parent name="grandParent" sex="男" age="88" hobby="code" @sayKnow="sayKnow"></parent> </section> </template> <script> import Parent from './Parent' export default { name: "GrandParent", components: { Parent }, data() { return {} }, methods: { sayKnow(val){ console.log(val) } }, mounted() { } } </script>Parent.vue
<template> <section> <p>父组件收到</p> <p>祖父的名字:{{name}}</p> <children v-bind="$attrs" v-on="$listeners"></children> </section> </template> <script> import Children from './Children' export default { name: "Parent", components: { Children }, // 父组件接收了name,所以name值是不会传到子组件的 props:['name'], data() { return {} }, methods: {}, mounted() { } } </script>Children.vue
<template> <section> <p>子组件收到</p> <p>祖父的名字:{{name}}</p> <p>祖父的性别:{{sex}}</p> <p>祖父的年龄:{{age}}</p> <p>祖父的爱好:{{hobby}}</p> <button @click="sayKnow">我知道啦</button> </section> </template> <script> export default { name: "Children", components: {}, // 由于父组件已经接收了name属性,所以name不会传到子组件了 props:['sex','age','hobby','name'], data() { return {} }, methods: { sayKnow(){ this.$emit('sayKnow','我知道啦') } }, mounted() { } } </script>結果の表示親コンポーネントは祖父の名前を受け取ります: grandParent子コンポーネントが受け取る祖父の名前: 祖父の性別: 男性祖父の年齢: 88祖父の趣味: コード8, Sun Chuanzu $listeners 中間イベントの助けを借りて、Sun は先祖に簡単に通知できます。コード例については、79, $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) を使用すると、文字列がオブジェクトに解析されます)。
このようにオブジェクトを保存するのは面倒ですか? sessionStorage をカプセル化し、その API を直接使用してオブジェクトを保存できるライブラリ Good-storage をお勧めします
// localStorage storage.set(key,val) storage.get(key, def) // sessionStorage storage.session.set(key, val) storage.session.get(key, val)
11, vuex
この有名な vuex の使用方法をここで紹介するつもりはありません。明確に書くと長すぎるためです...
大規模なシングルページ アプリケーションを開発する予定がない場合は、 Vuex の使用は面倒で冗長である可能性があります。それは本当です。アプリが十分に単純であれば、おそらく Vuex を使用する必要はありません。
以上がvueコンポーネントに値を渡す方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。