Je souhaite prendre en charge le script Router push dans Nuxt.js .
Je crée déjà un site Web en utilisant Vue.js mais ce n'est pas bon pour le SEO .
Donc, je crée un nouveau front-end en utilisant Nuxt.js . Je copie certains composants du répertoire Vue.js vers Nuxt.js et je l'exécute mais cela prend une erreur.
Dans Vue.js j'utilise ceci. $ Router.push ('/ users / Login ') pour accéder à la page Login . Ça marche bien. Mais dans Nuxt.js cela ne fonctionne pas.
Exemple: quand je suis sur la page http: // localhost: 8001 / About -> Je clique sur le bouton Login -> L'URL est http: // localhost: 8001 / About # , c'est faux!
Répertoire: https://imgur.com/a/YxGgXNI
Mon code Header.vue (inclure le bouton Connexion ) p>
Code court:
<template>
<b-navbar sticky toggleable="md" class="navbar-dark bd-navbar" type="dark">
<b-navbar-toggle target="bd-main-nav" />
<b-navbar-brand to="/">My Blog</b-navbar-brand>
<b-collapse
is-nav
class="justify-content-between"
id="bd-main-nav">
<b-navbar-nav>
<b-nav-item exact to="/">Home</b-nav-item>
<b-nav-item to="/ReviewBooks">Review Book</b-nav-item>
<b-nav-item to="/LifeSkills">Life Skills</b-nav-item>
<b-nav-item to="/About">About</b-nav-item>
<!-- <b-nav-item to="InsertBlogPost">New Post</b-nav-item> -->
</b-navbar-nav>
<!-- Right aligned nav items -->
<b-navbar-nav class="ml-auto">
<b-nav-item v-if="this.isLoggedIn==true">
<span v-show="userName.length > 0" class="align-middle ml-2 text-color">
{{userName}}
</span>
<b-button size="sm" class="my-2 my-sm-0 btn-outline-light btn-space" @click="clickToSignOut">
Sign out
</b-button>
</b-nav-item>
<b-nav-item v-else>
<b-button size="sm" class="my-2 my-sm-0 btn-outline-light"
@click="this.clickToLogin"
>Login
</b-button>
</b-nav-item>
</b-navbar-nav>
</b-collapse>
</b-navbar>
</template>
<script>
export default {
name: 'Header',
data() {
return {
userName:'',
profileUrl:'',
isLoggedIn: false
}
},
mounted() {
if (this.$session.exits()) {
let userObject = this.$session.get('loggedInUser')
this.userName = userObject.name ? userObject.name : ''
this.profileUrl = userObject.profileUrl ? userObject.profileUrl : ''
this.isLoggedIn = userObject ? true : false
} else {
this.userName = ""
this.profileUrl = ""
this.isLoggedIn = false
}
},
methods: {
clickToLogin() {
this.$router.push('/users/Login');
},
clickToSignOut() {
this.userName = ''
this.profileUrl = ''
this.isLoggedIn = false
// this.$emit('clickToSignOut')
this.$session.destroy()
this.$router.push('/')
},
}
}
</script>
<style scoped>
.navbar {
background-color: rgba(99, 13, 133, 0.9) !important;
}
.btn-space {
margin-left: 5px;
}
</style>
Code complet:
<script>
export default {
name: 'Header',
data() {
return {
userName:'',
profileUrl:'',
isLoggedIn: false
}
},
methods: {
clickToLogin() {
this.$router.push('/users/Login');
},
}
}
</script>
3 Réponses :
Essayez ceci. $ router.push ({path: '/ users / Login'); ou vous pouvez essayer ceci
Vous ne devriez pas faire référence à ceci dans le modèle et cela fonctionnera.
@click="clickToLogin"
devrait être juste
@click="this.clickToLogin"
Mon problème était que j'essayais de naviguer sur la balise d'ancrage avec # comme href.
Ainsi, pendant la navigation vuejs, l'URL était mise à jour avec # , et vue l'a considérée comme un processus de navigation séparé et d'arrêt de navigation. L'ajout de la prévention lors de l'événement click a résolu ce problème.