'Toggling components depending of the current path in Nuxt

My layouts/default.vue looks like this:

<template>
  <v-app style="background-color: transparent; color: unset">
    <v-main>
      <ActHeader></ActHeader>
      <Nuxt
        v-if="
          !$nuxt.isOffline ||
          $route.name == 'profile-downloads' ||
          $route.name == 'profile-downloads-id'
        "
        style="min-height: 300px"
      />
      <Footer />
    </v-main>
  </v-app>
</template>

<script>
import Footer from '@/components/Footer.vue'

export default {
  components: {
    Footer,
  },
  async fetch() {
    await this.$store.dispatch('store/retrieveSettings')
    await this.$store.dispatch('store/retrieveMenus')
  },
}
</script>

I don't want to show actHeader and Footer components into the first page(/) but in other pages(/about) I want to show these components.


I'm already aware of finding out URL and using watch like this:

watch: {
  $route (to, from) {
    //false actHeader and Footer Components!
  }
} 

and it's actually working but I'm looking for a better answer, maybe something more logical.



Solution 1:[1]

There is no special magic, use a conditional on each component, no cleaner way of doing otherwise (no need to over-engineer here).

<template>
  <div>
    <act-header v-if="$route.name !== 'index'"></act-header>
    <nuxt />
    <footer-comp v-if="$route.name !== 'index'"></footer-comp>
  </div>
</template>

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 kissu