![](/img/trans.png)
[英]How to pass data from one component to another component and store that data into an array in vue.js?
[英]Vue JS 3: How to pass data from one component to another other?
我正在尝试共享存储在Favorites.vue
文件中的收藏夹组件中的变量favorite_count
中的数据。 我想与App.vue
文件中的 App 组件共享该数据,但我无法共享。 我希望如果我在“收藏夹”组件中更改favorite_count
的值,它会在 App 组件中更改。 在网上做了很多研究,但还没有成功。 关于我可能做错了什么的任何想法?
Favorites.vue file
<template>
<div class="row m-5">
<h3 class="col-8">Your Favorites</h3>
<div class="col-4">
<p class="pull-right m-1">Picks
<span >{{ favorite_count }}</span> / 5</p>
</div>
<hr>
</div>
</template>
<script>
export default {
name: 'favorites',
data() {
return {
favorite_count: 5,
}
},
methods: {
changeFavoriteCount() {
this.favorite_count = this.favorite_count + 2;
},
emitToParent (event) {
this.$emit('childToParent', this.favorite_count)
}
}
}
</script>
App.vue
文件
<template>
<div class="navbar navbar-expand-md navbar-dark bg-primary">
<div class="collapse navbar-collapse" id="navbarResponsive">
<ul class="navbar-nav">
<li class="nav-item">
<router-link to="/favorites" class="btn btn-info">
Favorites ( {{ favorite_count }} )
</router-link>
</li>
</ul>
</div>
</div>
</template>
<script>
import Favorites from './components/Favorites.vue'
export default {
name: 'App',
components: {
Favorites
},
data () {
return {
favorite_count: 0,
}
}
}
</script>
如果您打算稍后在应用程序中使用<router-view>
,我会建议使用此解决方案
如果你打算在App.vue
<template>
中包含Favorites
,你可以使用props :
1.在父组件(App.vue)中声明你的'shared'变量
data () {
return {
favorite_count: 0,
}
},
2.在你的子组件中定义 props (Favorites.vue)
export default {
props: { favorite_count: Number },
...
}
3. 将favorite_count
作为道具传递给Favorites
<template>
...
<Favorites :favorite_count="favorite_count" ... />
</template>
如果您需要更新favorite_count
- 向父组件发出一个事件。 Vue 文档中的更多信息
编辑:澄清一下:如果您要从Favorites.vue更新favorite_count
,您需要向App.vue发出一个事件以避免改变 props。
这也意味着您需要将您的changeFavoriteCount()
函数移动到App.vue并将侦听器应用于您的子组件,它将调用此函数:
// App.vue
<template>
...
<Favorites
@your-update-event="changeFavoriteCount"
:favorite_count="favorite_count" ...
/>
</template>
...
changeFavoriteCount(newVal) {
this.favorite_count = newVal;
},
像这样更改您的Favourite.vue
文件
<template>
<div class="row m-5">
<h3 class="col-8">Your Favorites</h3>
<div class="col-4">
<p class="pull-right m-1">
Picks <span>{{ favorite_count }}</span> / 5
<button @click="changeFavoriteCount">Click me to change favorite_count</button>
</p>
</div>
<hr />
</div>
</template>
<script>
export default {
name: "favorites",
data() {
return {
favorite_count: 5,
};
},
methods: {
changeFavoriteCount() {
this.favorite_count = this.favorite_count + 2;
this.emitToParent();
},
emitToParent() {
this.$emit("childToParent", this.favorite_count);
},
},
};
</script>
和这样的 App.vue 文件
<template>
<div class="navbar navbar-expand-md navbar-dark bg-primary">
<div class="collapse navbar-collapse" id="navbarResponsive">
<ul class="navbar-nav">
<li class="nav-item">
<router-link to="/favorites" class="btn btn-info">
<Favorites @childToParent="updateFavorite" />
Favorites ( {{ favorite_count }} )
</router-link>
</li>
</ul>
</div>
</div>
</template>
<script>
import Favorites from './components/Favorites.vue'
export default {
name: 'App',
components: {
Favorites
},
data () {
return {
favorite_count: 0,
}
},
methods: {
updateFavorite(data) {
this.favorite_count = data;
},
},
}
</script>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.