ホームページ >ウェブフロントエンド >フロントエンドQ&A >Vueでパラメータを渡すにはどのような方法がありますか?
パラメータを渡す方法: 1. "props" と "$emit" を使用して親コンポーネントと子コンポーネントの間でパラメータを渡します; 2. "provide" と "inject" を使用して祖父コンポーネントと孫コンポーネントの間でパラメータを渡します。 3. Brothers Public ファイルはコンポーネント間でパラメータを転送するために使用されます; 4. "query" と "params" はルート間でパラメータを転送するために使用されます。
# このチュートリアルの動作環境: Windows7 システム、vue バージョン 2.9.6、DELL G3 コンピューター。
Vue での一般的なパラメータ受け渡しメソッド
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:'我是子组件的参数'
}
},
methods: {
toFather(){
// 1.子组件触发父组件方法
// $emit第一个参数为所要触发的父组件函数,函数名可自定义但要与父组件中对应函数名同名
// $emit第二个参数就是子组件向父组件传递的参数
this.$emit('receive',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:''
};
},
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('childMethod','发送给方法一的数据') // 方法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('childMethod', (res) => {
console.log('方法1:触发监听事件监听成功')
console.log(res)
})
},
callMethod() {
console.log('方法2:直接调用调用成功')
},
}
}
</script>
2. 孫コンポーネントのパラメータの受け渡し (提供と注入、コンポーネント レベルの影響を受けない)
provide
とinject は主に、高レベルのプラグイン/コンポーネント ライブラリのユースケースを提供します。アプリケーション コード内で直接使用することはお勧めできません。 公式ドキュメント:
https://cn.vuejs.org/v2/api/#provide-inject
https://cn.vuejs.org/v2/guide/components-edge -cases.html#Dependency Injection<!-- grandpa.vue -->
data() {
return {
msg: 'A'
}
},
provide() {
return {
message: this.msg
}
}
<!-- father.vue -->
components:{child},
inject:['message'],
<!-- child.vue -->
inject: ['message'],
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:'', data2:'' } }, 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:'two'),对应路由 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 サイトの他の関連記事を参照してください。