Vue.js 从另一个组件中的一个Vue单个组件获取数据?
我使用Vue.js 从另一个组件中的一个Vue单个组件获取数据?,vue.js,vuejs2,vue-component,Vue.js,Vuejs2,Vue Component,我使用Vue.js 2.5.13并具有以下结构: 组件一.vue: 从“component two.vue”导入component two 导出默认值{ 名称:“第一部分”, 组成部分:{ 成分二 }, 数据(){ 返回{ 输入_one:“来自ComponentOne的您好”, 输入二:…/您可以使用全局事件总线轻松实现这一点 对于更大、更复杂的应用程序,我建议使用vuex等状态管理工具 您可以使用 从“component two.vue”导入component two 导出默认值{ 名称
Vue.js 2.5.13
并具有以下结构:
组件一.vue:
从“component two.vue”导入component two
导出默认值{
名称:“第一部分”,
组成部分:{
成分二
},
数据(){
返回{
输入_one:“来自ComponentOne的您好”,
输入二:…/您可以使用全局事件总线轻松实现这一点
对于更大、更复杂的应用程序,我建议使用vuex等状态管理工具
您可以使用
从“component two.vue”导入component two
导出默认值{
名称:“第一部分”,
组成部分:{
成分二
},
数据(){
返回{
输入_one:“来自ComponentOne的您好”,
输入两个:“”
}
}
}
组件2.vue:
<template>
<div>
<input type="text" v-model="input_two">
</div>
</template>
<script>
export default {
name: "component-two",
data() {
return {
input_one: 'Hello from ComponentTwo',
input_two: ''
},
watch: {
input_two : function(val){
this.$emit('update:secondValue', val)
}
}
}
}
</script>
导出默认值{
名称:“第二部分”,
数据(){
返回{
输入一:“来自组件二的您好”,
输入两个:“”
},
观察:{
输入二:功能(val){
此.$emit('update:secondValue',val)
}
}
}
}
您需要实现一个将v型模型发送回父级的系统
这可以通过使用组件2中的computed属性来完成,该属性在其set方法中发出更改
例如:
Vue.component('component-two'{
名称:‘组件二’,
模板:“#组件二模板”,
道具:{
价值:{
要求:正确,
类型:字符串,
},
},
计算:{
信息:{
得到(){
返回此.value;
},
设置(val){
此.$emit('input',val);
},
},
},
});
var app=新的Vue({
el:“#应用程序”,
数据:{
信息1:‘m1’,
信息2:‘m2’,
},
});
输出
{{message1}}
{{message2}}
Vuejs使用“道具”进行父/子通信,使用“发射”事件进行子/父通信
您必须记住,对于传递给子组件的每个道具,您都应该将该道具传递给道具数组。这同样适用于事件,您发出的每个事件都应该在父组件中捕获,因此:
组件一。vue:
从“component two.vue”导入component two
导出默认值{
名称:“第一部分”,
组成部分:{
成分二
},
数据(){
返回{
输入_one:“来自ComponentOne的您好”,
输入两个:“”
}
},
方法:{
doSomenthing(数据){
此参数输入_two=数据;
}
}
}
组件二。vue:
有几种方法可以做到这一点,其他答案中也提到了一些方法:
(无特定顺序,有关更多信息,请阅读下面的详细章节)
使用
使用
使用
使用
使用
对于双向绑定,请记住它可能导致难以维持的突变链,
引自文件:
不幸的是,真正的双向绑定可能会产生维护问题,因为子组件可以变异父组件,而父组件和子组件中的变异源都不明显
以下是可用方法的一些详细信息:
1.)使用全局事件总线
我强烈建议不要将此方法用于组件之间的任何类型的公共通信,正如在许多地方(如
2.)在组件上使用道具
道具易于使用,是解决大多数常见问题的理想方法。
因为所有属性都需要在对象上可用,否则它们将不会是反应性的。
如果在Vue完成使其可观察后添加任何属性,则必须使用这些属性
//正常使用
Vue.set(可变,'aNewProp',42);
//这是如何在Nuxt中使用它
此.$set(this.historyEntry,'date',new date());
对于组件和父对象,对象都是被动的:
如果你将一个对象/数组作为道具传递,它将自动进行双向同步-在
子级,则在父级中更改
如果传递简单值(字符串、数字)
通过道具,您必须明确使用
引自-->
3.)使用v型属性
v-model属性是一种语法糖,可以在父级和子级之间实现简单的双向绑定。它的作用与sync修饰符的作用相同,只是它使用特定的属性和特定的事件进行绑定
这:
与此相同:
其中,道具必须是值,事件必须是输入
4.)使用同步修改器
sync修饰符也是语法糖,其作用与v-model相同,只是道具和事件名称由正在使用的任何东西设置
在父级中,它可以按如下方式使用:
可以从子级发出事件,通知父级任何更改:
this.$emit('update:title',newTitle)
5.)使用Vuex
Vuex是一种数据存储,可从每个组件访问。
可以订阅更改
通过使用Vuex存储,可以更容易地查看数据变化流,并显式定义它们。通过使用,可以轻松调试和回滚所做的更改
这种方法需要更多的样板,但如果在整个项目中使用,它将成为一种更干净的方法
<template>
<div>
<input type="text" v-model="input_two">
</div>
</template>
<script>
export default {
name: "component-two",
data() {
return {
input_one: 'Hello from ComponentTwo',
input_two: ''
},
watch: {
input_two : function(val){
this.$emit('update:secondValue', val)
}
}
}
}
</script>