javascript - 如何从方法中更改 Vue 应用程序的数据值?
问题描述
我有这个方法,用于身份验证,并且我想在用户登录时将我的站点的导航栏更改为子组件。为此,我应该能够更改我的 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>
有没有办法正确地做到这一点,或者一旦用户登录,你们会推荐另一种实现不同组件的解决方案吗?
解决方案
Vue 实例this
无法在您用作回调的普通函数中工作。这可能是代码中的问题。您可以使用箭头函数进行回调,也可以在将 分配给变量之外声明一个变量this
,并且可以在函数内部使用该变量。
请检查以下代码以获取两种解决方案
使用箭头函数
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((response) => {
console.log(response);
if (response.data.status === "OK") {
this.component = "loggedin"
} else {
this.component = "loggedout"
}
})
.catch((response) => {
console.log(response);
});
}
声明另一个变量
this
async checkIfLoggedIn() {
var result = null;
var token = this.getCookie("token");
var jsonData = {};
jsonData["token"] = token;
var bodyFormData = new FormData();
let vue = this;
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") {
vue.component = "loggedin"
} else {
vue.component = "loggedout"
}
})
.catch(function (response) {
console.log(response);
});
}
推荐阅读
- php - 从产品页面生成 PDF 时尝试获取非对象的属性“ID”
- python - ubuntu 服务器上的 Django 编码问题
- c# - 管理面板的文件管理部分
- java - 从包名加载类并从模板类创建对象
- javascript - 如何将数据从 fetch("URL").then() 存储到 java 脚本中的变量
- javascript - 更改 ajax 调用未发生
- .net - 阻止 DotNet 应用程序从本地文件夹加载 dll?
- excel - 如何始终在另一个固定单元格上显示放大的单元格?
- rxjs - 为什么 publishReplay(1)、refCount() 会重播最后一个好的值和最后一个错误?
- xml - 在 doctype 元素中包含 cdata 元素是否合法