У меня есть компонент Vue
для боковой панели с шаблоном, определенным как:
Vue.component('navigation',{
template:'
<ul class="nav">
<li v-if="checkIfUserIsAdmin() == true" id="adminMenu"></li>
<li id="userMenu"></li>
',
methods: {
checkIfUserIsAdmin() {
var result = false;
axiosInstance.get("/Profile/GetUserInfo").then(userInfo => {
result = userInfo.data.u.isAdmin;
})
.catch(userError => {
swal({
title: "Operational Platform",
text: "Unable to retrieve user info"
});
result = false;
});
return result;
}
}
});
Некоторый код был удален для краткости.
Когда я посещаю /Profile/GetUserInfo
я получаю JSON в ответ, который правильно возвращает меня true
но adminMenu не отображается, и мне интересно, почему. Кажется, что v-if
- это место, которое я испортил. Я также попытался изменить adminMenu, чтобы иметь v-if="checkIfUserIsAdmin() == 'true'"
но он все равно не работает.
Вам нужно дождаться результата метода.
Сначала вам нужно запустить метод checkIfUserIsAdmin
когда компонент установлен. В методе checkIfUserIsAdmin
вам нужно сохранить результат запроса в переменной adminMenuDisplay
а затем вы можете просмотреть эту переменную в v-if
.
Vue.component('navigation',{
template:'
<ul class="nav">
<li v-if="adminMenuDisplay" id="adminMenu"></li>
<li id="userMenu"></li>
',
data() {
return {
adminMenuDisplay: false
};
}
methods: {
checkIfUserIsAdmin() {
var result = false;
axiosInstance.get("/Profile/GetUserInfo").then(userInfo => {
this.adminMenuDisplay = userInfo.data.u.isAdmin;
})
.catch(userError => {
swal({
title: "Operational Platform",
text: "Unable to retrieve user info"
});
this.adminMenuDisplay = false;
});
}
},
mounted() {
this.checkIfUserIsAdmin();
}
});
v-if="async function"