访问从App.vue组件的组件并触发click事件
在我的模板我有一个click事件访问从App.vue组件的组件并触发click事件
<span v-on:click="showGalery()">
,我使用一个方法,它
export default {
name: 'osaka',
data: function() {
return {
galery: false,
}
},
methods: {
showGalery() {
this.galery = true
}
}
}
是否有可能触发这个方法来自App.vue模板,我的导航和路由器链接位于哪里?
我正在使用vue-webpack模板。 我有组件,router.js,App.js和main.js结构。
记住Vue公司具有单向数据流,所以如果你想设置组件上的东西,你可以简单地传递一个道具,并使用watcher
触发的变化:在父
Vue.component('gallery', {
template: `<div v-show="gallery">Gallery</div>`,
props: {
show: {
type: Boolean,
default: false
}
},
created() {
this.gallery = this.show;
},
watch: {
show(val) {
this.gallery = val;
}
},
data() {
return {
gallery: false
}
}
});
然后你将有:
new Vue({
el: '#app',
data: {
showGallery: false
}
});
,并使用以下标记:
<gallery :show="showGallery"></gallery>
看到这个的jsfiddle:https://jsfiddle.net/yx1uq370/
顺便说一句,如果你只是想显示隐藏整个组件,那么你可以使用V-显示组件本身上
Vue.component('gallery', {
template: `<div>Gallery</div>`
});
new Vue({
el: '#app',
data: {
showGallery: false
}
});
然后你的标记:
<gallery v-show="showGallery"></gallery>
下面是为小提琴:https://jsfiddle.net/gfr9kmub/
最后一点,你确定你真的需要触发此FR你的导航?我会假设你的导航会显示视图,并且视图本身会照顾这种类型的状态管理。否则,你可能想看看vuex来处理这种情况
感谢您的详细解答!我使用vue-webpack模板,所以它有点不同。我是Vue的初学者,所以我很努力做这个工作。 – mmiloshev
你有什么问题?如果您的画廊是通过'vue-router'呈现的,那么您可能需要重新思考如何通过使用'vuex'或将显示/隐藏功能移动到视图本身来获取画廊组件的信息,画廊组件作为一个孩子而不是画廊是实际的观点。 –
所以这是在一个子组件,你想从父级触发它?或者在父母处理? –
最好使用来自父组件的属性 –
如果你的“osaka”组件远离你的App.vue,你应该使用flux模式来从任何地方触发'showGalery()'。 –