我正在尝试共享存储favorite_count
在Favorites.vue
文件中收藏夹组件中的变量中的数据。我想与App.vue
文件中的 App 组件共享该数据,但我无法共享。我希望如果我更改favorite_count
收藏夹组件中的值,它会在应用程序组件中更改。在网上做了很多研究,但还没有成功。关于我可能做错了什么的任何想法?
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>
稍后在您的应用程序中使用,我会建议此解决方案
如果要包含Favorites
在<template>
in 中App.vue
,则可以使用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 文档中的更多信息
编辑:澄清一下:如果你favorite_count
要从Favorites.vue更新,你需要向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;
},
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句