目次
ここではカスタム イベントを使用する必要があります。子コンポーネントで this.$emit('myEvent') を使用してトリガーし、親コンポーネントで @myEvent を使用して " >#2. 子コンポーネントを親コンポーネントに渡すここではカスタム イベントを使用する必要があります。子コンポーネントで this.$emit('myEvent') を使用してトリガーし、親コンポーネントで @myEvent を使用して
カスタム イベントの使用" >カスタム イベントの使用
まず子コンポーネント Children.vue" >$ref の機能を使用して子コンポーネントの ID を定義します。親コンポーネントは子コンポーネントに直接アクセスできます。メソッドとプロパティまず子コンポーネント Children.vue
" >8. Sun Chuanzu
##9、$parent" >##9、$parent
10、sessionStorage传值" >10、sessionStorage传值
ホームページ ウェブフロントエンド フロントエンドQ&A vueコンポーネントに値を渡す方法

vueコンポーネントに値を渡す方法

Jan 06, 2023 pm 05:26 PM
vue 値を渡す vue コンポーネント

値の受け渡し方法: 1. props を使用して親から子に渡します; 2. 子から親に渡します。イベントをカスタマイズする必要があります。「this.$emit('イベント名')」を使用して、子コンポーネントでトリガーし、親で「@event name」を使用してリッスンします; 3. 兄弟間では、パブリックの親要素をブリッジとして使用し、親と子のプロパティを組み合わせてパラメータと子と親のカスタム イベントを渡します。 4. ルートを使用して値を渡す; 5. $ref を使用して値を渡す; 6. 依存関係注入を使用して子孫と曾孫に渡す; 7. $attrs を使用する; 8. $listeners 中間イベントを使用する; 9. $parent を使用する渡すなど

vueコンポーネントに値を渡す方法

#このチュートリアルの動作環境: Windows7 システム、vue3 バージョン、DELL G3 コンピューター。

この記事では、Vue コンポーネントで値を転送する 10 の方法について説明します。一般的に使用される方法は 5 ~ 6 つあります。概要図から始めましょう:


vueコンポーネントに値を渡す方法

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

子コンポーネント内の props、つまり props を定義します。 ['msg']、msg はオブジェクトにすることもできます。基本的なデータ型にすることもできます。

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

デフォルト値がオブジェクトの場合 type :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:[&#39;msg&#39;],
        data() {
            return {
                myMsg:this.msg
            }
        },
        methods: {}
    }
</script>
ログイン後にコピー

Parent.vue

<template>
  <div class="parent">
    <Children :msg="message"></Children>
  </div>
</template>

<script>
import Children from &#39;../components/Children&#39;

export default {
  name: &#39;Parent&#39;,
  components: {
      Children
  },
  data() {
      return {
          message:&#39;hello world&#39;
}
},
}
</script>
ログイン後にコピー

#2. 子コンポーネントを親コンポーネントに渡すここではカスタム イベントを使用する必要があります。子コンポーネントで this.$emit('myEvent') を使用してトリガーし、親コンポーネントで @myEvent を使用して

Children.vue

<template>
    <div class="parent">
        这里是计数:{{parentNum}}
        <Children-Com @addNum="getNum"></Children-Com>
    </div>
</template>

<script>
    import ChildrenCom from &#39;../components/Children&#39;

    export default {
        name: &#39;Parent&#39;,
        components: {
            ChildrenCom
        },
        data() {
            return {
                parentNum: 0
            }
        },
        methods:{
            // childNum是由子组件传入的
            getNum(childNum){
                this.parentNum = childNum
            }
        }
    }
</script>
ログイン後にコピー

Parent.vue

<template>
    <div class="parent">
        这里是计数:{{parentNum}}
        <Children-Com @addNum="getNum"></Children-Com>
    </div></template><script>
    import ChildrenCom from &#39;../components/Children&#39;

    export default {
        name: &#39;Parent&#39;,
        components: {
            ChildrenCom        },
        data() {
            return {
                parentNum: 0
            }
        },
        methods:{
            // childNum是由子组件传入的
            getNum(childNum){
                this.parentNum = childNum            }
        }
    }</script>
ログイン後にコピー

##3. 兄弟コンポーネント間での値の受け渡し

カスタム イベントの使用

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

import Vue from &#39;vue&#39;
export default new Vue()
ログイン後にコピー
Children1.vue

<template>
    <section>
        <div @click="pushMsg">push message</div>
        <br>
    </section>
</template>

<script>
    import eventBus from &#39;./EventBus&#39;
    export default {
        name: "Children1",
        components: {},
        data() {
            return {
                childNum:0
            }
        },
        methods: {
            pushMsg(){
            	// 通过事件总线发送消息
                eventBus.$emit(&#39;pushMsg&#39;,this.childNum++)
            }
        }
    }
</script>
ログイン後にコピー

Children2.vue

<template>
    <section>
        children1传过来的消息:{{msg}}
    </section>
</template>

<script>
    import eventBus from &#39;./EventBus&#39;

    export default {
        name: "Children2",
        components: {},
        data() {
            return {
                msg: &#39;&#39;
            }
        },
        mounted() {
        	// 通过事件总线监听消息
            eventBus.$on(&#39;pushMsg&#39;, (children1Msg) => {
                this.msg = children1Msg
            })
        }
    }
</script>
ログイン後にコピー

Parent.vue

<template>
    <div class="parent">
        <Children1></Children1>
        <Children2></Children2>
    </div>
</template>

<script>
    import Children1 from &#39;../components/Children1&#39;
    import Children2 from &#39;../components/Children2&#39;

    export default {
        name: &#39;Parent&#39;,
        components: {
            Children1,
            Children2
        },
        data() {
            return {
            }
        },
        methods:{
        }
    }
</script>
ログイン後にコピー

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

4 を参照してください。ルート

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

ページ A からページ B にジャンプするときは、これを使用します。$ router.push('/B?name =danseek')ページ B は this.$route.query.name を使用して、ページ Aから渡された値を取得できます

ルーターの違いに注意してくださいそして、route

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

次のルートを設定します:

{
    path: &#39;/b/:name&#39;,
    name: &#39;b&#39;,
    component: () => import( &#39;../views/B.vue&#39;)
  },
ログイン後にコピー
取得できますB ページの this.$route.params.name 経由 ルートによって渡される名前の値

iii. 親子コンポーネントを使用して値を渡します

router-view 自体もコンポーネントであるため、親子コンポーネント値転送メソッドを使用して値を渡し、対応するサブページに props を追加することもできます。型が更新された後に更新されないため、サブページのマウントされたフックで最新の型値を直接取得することはできませんが、watch を使用します。

<router-view :type="type"></router-view>
ログイン後にコピー
// 子页面
......
props: [&#39;type&#39;]
......
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: &#39;&#39;,
                desc:&#39;The use of ref&#39;
            }
        },
        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 &#39;../components/Children&#39;

    export default {
        name: &#39;parent&#39;,
        components: {
            Children,
        },
        methods:{
            pushMsg(){
                // 通过这个ID可以访问子组件的方法
                this.$refs.children.updateMsg(&#39;Have you received the clothes?&#39;)
                // 也可以访问子组件的属性
                console.log(&#39;children props:&#39;,this.$refs.children.desc)
            }
        },
    }
</script>
ログイン後にコピー
を定義します。

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

#親コンポーネントに getName() メソッドがあり、次のことを行う必要があるとします。すべての子孫に提供します
provide: function () {
  return {
    getName: this.getName()
  }
}
ログイン後にコピー
provide オプションを使用すると、子孫コンポーネントに提供するデータ/メソッドを指定できます

その後、任意の子孫コンポーネントで

inject# を使用できます## 親コンポーネントを現在のインスタンスに挿入する データ/メソッド:

inject: [&#39;getName&#39;]
ログイン後にコピー

Parent.vue

<template>
    <div class="parent">
        <Children></Children>
    </div>
</template>

<script>
    import Children from &#39;../components/Children&#39;

    export default {
        name: &#39;Parent&#39;,
        components: {
            Children,
        },
        data() {
            return {
                name:&#39;dan_seek&#39;
            }
        },
        provide: function () {
            return {
                getName: this.name
            }
        },
    }
</script>
ログイン後にコピー

Children.vue<div class="code" style="position:relative; padding:0px; margin:0px;"><pre class='brush:php;toolbar:false;'><template> <section> 父组件传入的值:{{getName}} </section> </template> <script> export default { name: "Children", components: {}, data() { return { } }, inject: [&amp;#39;getName&amp;#39;], } </script></pre><div class="contentsignin">ログイン後にコピー</div></div>

# 7、祖先の孫 $attrs

通常、中間遷移として父のプロパティを使用する必要がありますが、この方法では、父コンポーネントは親とは関係のないいくつかの属性を持つことになります。コンポーネントのビジネスであり、結合度は高いです。$attrs と祖先と孫の助けを借りて簡素化できます。変更は必要ありません

GrandParent.vue
<template>
    <section>
        <parent name="grandParent" sex="男" age="88" hobby="code" @sayKnow="sayKnow"></parent>
    </section>
</template>

<script>
    import Parent from &#39;./Parent&#39;
    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 &#39;./Children&#39;

  export default {
    name: "Parent",
    components: {
      Children
    },
    // 父组件接收了name,所以name值是不会传到子组件的
    props:[&#39;name&#39;],
    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:[&#39;sex&#39;,&#39;age&#39;,&#39;hobby&#39;,&#39;name&#39;],
    data() {
      return {}
    },
    methods: {
      sayKnow(){
        this.$emit(&#39;sayKnow&#39;,&#39;我知道啦&#39;)
      }
    },
    mounted() {
    }
  }
</script>
ログイン後にコピー

結果の表示

父组件收到
祖父的名字:grandParent
子组件收到
祖父的名字:
祖父的性别:男
祖父的年龄:88
祖父的爱好:code
ログイン後にコピー

8. Sun Chuanzu
$listeners 中間イベントの助けを借りて、Sun は先祖に簡単に通知できます。コード例については、7

##9、$parent

を参照してください。 #親を通じて親コンポーネントのインスタンスを取得でき、このインスタンスを通じて親コンポーネントのプロパティとメソッドにアクセスできます。兄弟ルートもあり、ルートコンポーネントのインスタンスを取得できます。

语法:

// 获父组件的数据
this.$parent.foo

// 写入父组件的数据
this.$parent.foo = 2

// 访问父组件的计算属性
this.$parent.bar

// 调用父组件的方法
this.$parent.baz()
ログイン後にコピー

于是,在子组件传给父组件例子中,可以使用this.$parent.getNum(100)传值给父组件。

10、sessionStorage传值

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

语法:

// 保存数据到 sessionStorage
sessionStorage.setItem(&#39;key&#39;, &#39;value&#39;);

// 从 sessionStorage 获取数据
let data = sessionStorage.getItem(&#39;key&#39;);

// 从 sessionStorage 删除保存的数据
sessionStorage.removeItem(&#39;key&#39;);

// 从 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

【相关推荐:vuejs视频教程web前端开发

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

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

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

VUEのボタンに関数を追加する方法 VUEのボタンに関数を追加する方法 Apr 08, 2025 am 08:51 AM

HTMLテンプレートのボタンをメソッドにバインドすることにより、VUEボタンに関数を追加できます。 VUEインスタンスでメソッドを定義し、関数ロジックを書き込みます。

VueでBootstrapの使用方法 VueでBootstrapの使用方法 Apr 07, 2025 pm 11:33 PM

vue.jsでBootstrapを使用すると、5つのステップに分かれています。ブートストラップをインストールします。 main.jsにブートストラップをインポートしますブートストラップコンポーネントをテンプレートで直接使用します。オプション:カスタムスタイル。オプション:プラグインを使用します。

vue.jsでJSファイルを参照する方法 vue.jsでJSファイルを参照する方法 Apr 07, 2025 pm 11:27 PM

vue.jsでJSファイルを参照するには3つの方法があります。タグ;; mounted()ライフサイクルフックを使用した動的インポート。 Vuex State Management Libraryを介してインポートします。

VueでWatchの使用方法 VueでWatchの使用方法 Apr 07, 2025 pm 11:36 PM

Vue.jsの監視オプションにより、開発者は特定のデータの変更をリッスンできます。データが変更されたら、Watchはコールバック関数をトリガーして更新ビューまたはその他のタスクを実行します。その構成オプションには、すぐにコールバックを実行するかどうかを指定する即時と、オブジェクトまたは配列の変更を再帰的に聴くかどうかを指定するDEEPが含まれます。

Vueによる前のページに戻る方法 Vueによる前のページに戻る方法 Apr 07, 2025 pm 11:30 PM

vue.jsには、前のページに戻る4つの方法があります。$ router.go(-1)$ router.back()outes&lt; router-link to =&quot;/&quot; Component Window.history.back()、およびメソッド選択はシーンに依存します。

Vue Multi-Page開発とはどういう意味ですか? Vue Multi-Page開発とはどういう意味ですか? Apr 07, 2025 pm 11:57 PM

VUEマルチページ開発は、VUE.JSフレームワークを使用してアプリケーションを構築する方法です。アプリケーションは別々のページに分割されます。コードメンテナンス:アプリケーションを複数のページに分割すると、コードの管理とメンテナンスが容易になります。モジュール性:各ページは、簡単に再利用および交換するための別のモジュールとして使用できます。簡単なルーティング:ページ間のナビゲーションは、単純なルーティング構成を介して管理できます。 SEOの最適化:各ページには独自のURLがあり、SEOに役立ちます。

Vueのバージョンを照会する方法 Vueのバージョンを照会する方法 Apr 07, 2025 pm 11:24 PM

Vue Devtoolsを使用してブラウザのコンソールでVueタブを表示することにより、Vueバージョンを照会できます。 NPMを使用して、「NPM List -G Vue」コマンドを実行します。 package.jsonファイルの「依存関係」オブジェクトでVueアイテムを見つけます。 Vue CLIプロジェクトの場合、「Vue -Version」コマンドを実行します。 &lt; script&gt;でバージョン情報を確認してくださいVueファイルを参照するHTMLファイルにタグを付けます。

Function Intercept Vueの使用方法 Function Intercept Vueの使用方法 Apr 08, 2025 am 06:51 AM

VUEの関数傍受は、指定された期間内に関数が呼び出され、パフォーマンスの問題を防ぐ回数を制限するために使用される手法です。実装方法は次のとおりです。LodashLibrary:Import {Debounce}から「Lodash」からインポート。 debounce関数を使用して、インターセプト関数を作成します。インターセプト関数を呼び出すと、制御関数は500ミリ秒でせいぜい1回呼び出されます。

See all articles