У меня есть этот метод, который я использую для аутентификации, и я хочу изменить Navbar моего сайта на дочерний компонент, когда пользователь вошел в систему. Для этого я должен иметь возможность изменить значение data (), но это кажется невозможным.
<template>
<div id="navbar">
<component v-bind:is='component'></component>
</div>
</template>
<script>
import axios from 'axios'
import auth_mixin from '../mixins/auth_mixin.js'
import NavbarLoggedOut from '@/components/navbar_children/NavbarLoggedOut.vue'
import NavbarLoggedIn from '@/components/navbar_children/NavbarLoggedIn.vue'
import NavbarAdmin from '@/components/navbar_children/NavbarAdmin.vue'
export default {
name: 'Navbar',
components: {
'loggedout':NavbarLoggedOut,
'loggedin':NavbarLoggedIn,
'admin':NavbarAdmin
},
mixins: [auth_mixin],
created () {
this.checkIfLoggedIn()
},
data() {
return{
component:''
}
},
methods: {
async checkIfLoggedIn () {
var result = null;
var token = this.getCookie("token")
var jsonData = {}
jsonData["token"] = token
var bodyFormData = new FormData();
bodyFormData.append('data', JSON.stringify(jsonData));
await axios({
method: 'post',
url: 'backend/index.php?action=checkAuth',
data: bodyFormData,
headers: {'Content-Type': 'multipart/form-data'}
})
.then(function (response) {
console.log(response);
if(response.data.status==="OK"){
this.component="loggedin"
}else{
this.component="loggedout"
}
})
.catch(function (response) {
console.log(response);
});
}
}
}
</script>
Есть ли способ сделать это правильно или вы, ребята, порекомендовали бы другое решение для реализации различных компонентов, как только пользователь вошел в систему?