TypeError: Cannot read properties of undefined (reading '$router') vuejs
TypeError: Cannot read properties of undefined (reading '$router') vuejs
因此,如果 api 调用 return 状态 422,我将尝试将用户重定向到不同的路由。但我收到错误消息
TypeError: Cannot read properties of undefined (reading '$router')
我的routes.js:
{
path: '/dashboard',
component: Dashboard,
name: 'Dashboard',
beforeEnter: (to, form, next) =>{
axios.get('/api/authenticated')
.then(()=>{
next();
}).catch(()=>{
return next({ name: 'Login'})
})
},
children: [
{
path: 'documentCollections',
component: DocumentCollection,
name: 'DocumentCollections'
},
{
path: 'document',
component: Document,
name: 'Document'
},
{
path: 'createDocument',
component: CreateDocument,
name: 'CreateDocument'
},
{
path: 'suppliers',
component: Suppliers,
name: 'Suppliers'
},
{
path: 'settings',
component: Settings,
name: 'Settings'
},
]
}
我也有 login/register 个组件,当我使用
this.$router.push({ name: "DocumentCollections"});
它重定向用户没有任何错误。问题是当我在仪表板组件的子组件中时。
在 documentCollections 组件中我有一个方法:
loadCollections(){
axios.get('/api/documentCollections')
.then((response) => {
this.Collections = response.data.data
this.disableButtons(response.data.data);
})
.catch(function (error){
if(error.response.status === 422){
//here is where the error happens
this.$router.push({ name: "Settings"});
}
});
},
加载集合,但如果用户有一些数据集为空 api return 状态 422。我希望他被重定向到设置组件。
(documentCollection 和 Settings 都是 Dashboard 的子组件)
为什么 this.$router.push 在这里不起作用,但在 login/register 组件中起作用?
在回调函数中调用 this
会创建一个新绑定到 this
对象,而不是正则函数表达式中的 Vue 对象。
您可以使用箭头语法来定义函数,因此this
不会被覆盖。
.catch((error) => {
if(error.response.status === 422){
this.$router.push({name: "Settings"});
}
})
另一种选择
在 axios 调用之前定义另一个 this
实例,并在收到响应后使用它。
let self = this
...
self.$router.push({name: "Settings"})
用你的代码
loadCollections(){
let self = this;
axios.get('/api/documentCollections')
.then((response) => {
this.Collections = response.data.data
this.disableButtons(response.data.data);
})
.catch(function (error){
if(error.response.status === 422){
self.$router.push({name: "Settings"});
}
});
},
因此,如果 api 调用 return 状态 422,我将尝试将用户重定向到不同的路由。但我收到错误消息
TypeError: Cannot read properties of undefined (reading '$router')
我的routes.js:
{
path: '/dashboard',
component: Dashboard,
name: 'Dashboard',
beforeEnter: (to, form, next) =>{
axios.get('/api/authenticated')
.then(()=>{
next();
}).catch(()=>{
return next({ name: 'Login'})
})
},
children: [
{
path: 'documentCollections',
component: DocumentCollection,
name: 'DocumentCollections'
},
{
path: 'document',
component: Document,
name: 'Document'
},
{
path: 'createDocument',
component: CreateDocument,
name: 'CreateDocument'
},
{
path: 'suppliers',
component: Suppliers,
name: 'Suppliers'
},
{
path: 'settings',
component: Settings,
name: 'Settings'
},
]
}
我也有 login/register 个组件,当我使用
this.$router.push({ name: "DocumentCollections"});
它重定向用户没有任何错误。问题是当我在仪表板组件的子组件中时。
在 documentCollections 组件中我有一个方法:
loadCollections(){
axios.get('/api/documentCollections')
.then((response) => {
this.Collections = response.data.data
this.disableButtons(response.data.data);
})
.catch(function (error){
if(error.response.status === 422){
//here is where the error happens
this.$router.push({ name: "Settings"});
}
});
},
加载集合,但如果用户有一些数据集为空 api return 状态 422。我希望他被重定向到设置组件。 (documentCollection 和 Settings 都是 Dashboard 的子组件)
为什么 this.$router.push 在这里不起作用,但在 login/register 组件中起作用?
在回调函数中调用 this
会创建一个新绑定到 this
对象,而不是正则函数表达式中的 Vue 对象。
您可以使用箭头语法来定义函数,因此this
不会被覆盖。
.catch((error) => {
if(error.response.status === 422){
this.$router.push({name: "Settings"});
}
})
另一种选择
在 axios 调用之前定义另一个 this
实例,并在收到响应后使用它。
let self = this
...
self.$router.push({name: "Settings"})
用你的代码
loadCollections(){
let self = this;
axios.get('/api/documentCollections')
.then((response) => {
this.Collections = response.data.data
this.disableButtons(response.data.data);
})
.catch(function (error){
if(error.response.status === 422){
self.$router.push({name: "Settings"});
}
});
},