Files
miriamgemeinde/src/components/ContentComponent.vue
2024-06-17 13:36:15 +02:00

74 lines
1.7 KiB
Vue

<template>
<div>
<h1>{{ title }}</h1>
<RenderContentComponent :content="content" />
</div>
</template>
<script>
import axios from '@/axios';
import { mapState, mapGetters } from 'vuex';
import RenderContentComponent from '@/components/RenderContentComponent.vue';
export default {
name: 'ContentComponent',
components: {
RenderContentComponent
},
props: {
link: {
type: String,
required: true,
},
},
data() {
return {
content: '',
title: '',
};
},
computed: {
...mapState(['menuData']),
...mapGetters(['getMenuData']),
},
watch: {
link: {
immediate: true,
handler(newLink) {
this.fetchContent(newLink);
this.setTitle(newLink);
},
},
},
methods: {
async fetchContent(link) {
try {
const response = await axios.get(`/page-content?link=${link}`);
this.content = response.data.content;
} catch (error) {
console.error('Fehler beim Abrufen des Inhalts:', error);
}
},
setTitle(link) {
const findTitle = (menuItems, link) => {
for (const item of menuItems) {
if (item.link === link) {
return item.pageTitle || item.name;
}
if (item.submenu && item.submenu.length > 0) {
const found = findTitle(item.submenu, link);
if (found) {
return `${found}`;
}
}
}
return '';
};
this.title = findTitle(this.menuData, link);
},
},
};
</script>
<style scoped></style>