ホームページ >ウェブフロントエンド >フロントエンドQ&A >Vueでパラメータを渡すにはどのような方法がありますか?

Vueでパラメータを渡すにはどのような方法がありますか?

青灯夜游
青灯夜游オリジナル
2021-09-15 14:55:4211039ブラウズ

パラメータを渡す方法: 1. "props" と "$emit" を使用して親コンポーネントと子コンポーネントの間でパラメータを渡します; 2. "provide" と "inject" を使用して祖父コンポーネントと孫コンポーネントの間でパラメータを渡します。 3. Brothers Public ファイルはコンポーネント間でパラメータを転送するために使用されます; 4. "query" と "params" はルート間でパラメータを転送するために使用されます。

Vueでパラメータを渡すにはどのような方法がありますか?

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

Vue での一般的なパラメータ受け渡しメソッド

  • コンポーネント通信 - Vue プロパティの親コンポーネントと子コンポーネント間のメソッド呼び出しとパラメータ受け渡し、$emit

  • コンポーネント通信 - 祖父コンポーネントと孫コンポーネント間のパラメータ受け渡し、提供、注入

  • コンポーネント通信 - 兄弟コンポーネント間のパラメータ受け渡し Bus.js

  • #パラメータ クエリとルート間のパラメータ
#1. 親子コンポーネント

1.1 親から子へ (小道具)

<!-- 父组件father.vue -->
<template>
  <div>
    <div>这里是father组件</div>
    <div>这是父组件要传给子组件的参数:{{msg}}</div>
    <!-- 1.传递:data1为动态参数msg的参数名,名字自定义,与子组件接收参数名同名
    data2为静态参数的参数名,名字自定义,与子组件接收参数名同名 -->
    <child :data1="msg" data2="777"></child>
  </div>
</template>
<script>
  import child from "./child";
  export default {
      data() {
          return {
              msg:"666"
          }
      },
    components: {
      child
    }
  };
</script>
<!-- 子组件child.vue -->
<template>
  <div>
    <div>这里是child组件</div>
    <!-- 3.使用:这里就是接收的父组件参数 -->
    <div>接受的父组件动态参数:{{ data1 }}</div>
    <div>接受的父组件静态参数:{{ data2 }}</div>
    <div>接受的父组件参数:{{ data }}</div>
  </div>
</template>
<script>
  export default {
    // 2.接收:props接收父组件参数,data1与data2为传递参数的参数名,与父组件内同名
    props: ["data1", "data2"],
    data() {
      return {
        data: "默认值"
      };
    },
    // 3.使用:直接用this调用
    mounted() {
      this.data = this.data1;
    }
  };
</script>
ページのデータ効果は次のとおりです

ここで少し注意してください。親コンポーネントによって渡されたパラメータをライフサイクル中に割り当てる必要がある場合、それらのパラメータはマウントにバインドできません。それ以外の場合は、このパラメータをバインドできません。子コンポーネントのメソッドで呼び出されますが、成功しません。ライフサイクルシーケンス: 親の beforeMount ->子 beforeCreate...子のマウント ->親のマウント

1.2 子から親へ ($emit)

<!-- 子组件child.vue -->
<template>
  <div>
    <div>这里是child组件</div>
    <!-- 这里就是接收的父组件参数 -->
    <input type="button" value="点击向父组件传参" @click="toFather">
  </div>
</template>
<script>
  export default {
    data(){
      return{
        cmsg:&#39;我是子组件的参数&#39;
      }
    },
    methods: {
      toFather(){
        // 1.子组件触发父组件方法
        // $emit第一个参数为所要触发的父组件函数,函数名可自定义但要与父组件中对应函数名同名
        // $emit第二个参数就是子组件向父组件传递的参数
        this.$emit(&#39;receive&#39;,this.cmsg);
      }
    },
  };
</script>
<style scoped></style>
<!-- father.vue -->
<template>
  <div>
    <div>这里是father组件</div>
    <div>接收子组件参数:{{fmsg}}</div>
    <!-- 2.在对应子组件上绑定函数,这里“receive”是函数名,可自定义但要与子组件触发函数同名 -->
    <child @receive="fromChild"></child>
  </div>
</template>
<script>
  import child from "./child";
  export default {
    data() {
      return {
        fmsg:&#39;&#39;
      };
    },
    methods: {
      // 接收子组件参数,赋值
      fromChild(data){
        this.fmsg=data;
      }
    },
    components: {
      child
    }
  };
</script>
<style scoped></style>
ボタンをクリックした後のページのレンダリングは次のとおりです

1.3 親コンポーネントが子コンポーネントのメソッド ($on) を呼び出します

<!-- father.vue -->
<template>
    <div>
        <div @click="click">点击父组件</div>
        <child ref="child"></child>
    </div>
</template>

<script>
    import child from "./child";
    export default {
        methods: {
            click() {
                this.$refs.child.$emit(&#39;childMethod&#39;,&#39;发送给方法一的数据&#39;) // 方法1:触发监听事件
                this.$refs.child.callMethod() // 方法2:直接调用
            },
        },
        components: {
            child,
        }
    }
</script>
<!-- child.vue -->
<template>
    <div>子组件</div>
</template>

<script>
    export default {
        mounted() {
            this.monitoring() // 注册监听事件
        },
        methods: {
            monitoring() { // 监听事件
                this.$on(&#39;childMethod&#39;, (res) => {
                    console.log(&#39;方法1:触发监听事件监听成功&#39;)
                    console.log(res)
                })
            },
            callMethod() {
                console.log(&#39;方法2:直接调用调用成功&#39;)
            },
        }
    }
</script>
2. 孫コンポーネントのパラメータの受け渡し (提供と注入、コンポーネント レベルの影響を受けない)

provide

inject は主に、高レベルのプラグイン/コンポーネント ライブラリのユースケースを提供します。アプリケーション コード内で直接使用することはお勧めできません。 公式ドキュメント: https://cn.vuejs.org/v2/api/#provide-injecthttps://cn.vuejs.org/v2/guide/components-edge -cases.html#Dependency Injection

<!-- grandpa.vue -->
        data() {
            return {
                msg: &#39;A&#39;
            }
        },
        provide() {
            return {
                message: this.msg
            }
        }
<!-- father.vue -->
        components:{child},
        inject:[&#39;message&#39;],
<!-- child.vue -->
        inject: [&#39;message&#39;],
        created() {
            console.log(this.message)    // A
        },

3. 兄弟コンポーネントのパラメータ受け渡し (bus.js)

3.1 Bus.js の作成

3.2 兄弟コンポーネントと同様にパラメータを渡す

import Bus from "@/utils/bus";   //注意引入
    export default {
        data(){
            return {
                num:1
            }
        },
        methods: {
            handle(){
                Bus.$emit("brother", this.num++, "子组件向兄弟组件传值");
            }
        },
    }
#3.3 兄弟コンポーネントからパラメータを受け入れる

import Bus from "@/utils/bus";   //注意引入
    export default {
        data(){
            return {
                data1:&#39;&#39;,
                data2:&#39;&#39;
            }
        },
        mounted() {
            Bus.$on("brother", (val, val1) => {    //取 Bus.$on
                this.data1 = val;
                this.data2 = val1;
            });
        },
    }

4. ルート間のパラメータ転送 (クエリとパラメータ)

クエリとパラメータはほぼ同じ方法で使用されます。ここで簡単に説明します。ルーティング設定、パラメータ転送、

#4.1params の呼び出しを導入すると、パラメータは URL

// router的配置
    {
      path: "/two/:id/:data",     // 跳转的路由后加上/:id,多个参数继续按格式添加,数据按顺序对应
      name: "two",
      component: two
    }

// 跳转,这里message为123
  this.$router.push({
    path: `/two/${this.message}/456`     // 直接把数据拼接在path后面
  });
 // 接收
  created() {
      this.msg1=this.$route.params.id    // 123
      this.msg2=this.$route.params.data  // 456
   }

// url显示,数据显示在url,所以这种方式传递数据仅限于一些不那么重要的参数
  /two/123/456

に表示されます。 4.2params、パラメータは URL に表示されず、ページが更新されるとデータが消えます

// router的配置
    {
      path: "/two",
      name: "two",
      component: two
    }
// 跳转,这里message为123
    this.$router.push({
      name: `two`,    // 这里只能是name,对应路由
      params: { id: this.message, data: 456 }
    });
 // 接收
  created() {
      this.msg1=this.$route.params.id    // 123
      this.msg2=this.$route.params.data  // 456
   }

// url显示,数据不显示在url
  /two

4.3query、パラメータは表示されますURL の

#
// router的配置
    {
      path: "/two",
      name: "two",
      component: two
    }
// 跳转,这里message为123
    this.$router.push({
      path: `/two`,    // 这里可以是path也可以是name(如果是name,name:&#39;two&#39;),对应路由
      query: { id: this.message, data: 456 }
    });
 // 接收
  created() {
      this.msg1=this.$route.query.id    // 123
      this.msg2=this.$route.query.data  // 456
   }

// url显示,数据显示在url
  /two?id=123&data=456

関連する推奨事項:「vue.js チュートリアル

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

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