类型错误:无法读取未定义的属性(读取“$router”)vuejs

2023-11-26

因此,如果 api 调用返回状态 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'
            },
        ]
}

我也有登录/注册组件,当我使用时

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"});
                }
            });
    },

这会加载集合,但如果用户有一些数据集 null api 返回状态 422。我希望他被重定向到设置组件。 (documentCollection和Settings都是Dashboard的子组件)

为什么 this.$router.push 在这里不起作用,但在登录/注册组件中起作用?


Calling this在回调函数内部创建一个新的绑定this对象而不是正则函数表达式中的 Vue 对象。

您可以使用箭头语法来定义函数,因此this不会被覆盖。

.catch((error) => {
    if(error.response.status === 422){
        this.$router.push({name: "Settings"});
    }
})

更多信息

另外一个选择

定义另一个实例this在 axios 调用之前并在收到响应后使用它。

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"});
            }
        });
},
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

类型错误:无法读取未定义的属性(读取“$router”)vuejs 的相关文章

随机推荐

  • Python:如何从gmail API获取电子邮件的主题

    使用 Gmail API 如何检索电子邮件的主题 我在原始文件中看到了它 但是检索它非常麻烦 而且我确信应该有一种方法可以直接通过 API 来完成它 messageraw service users messages get userId
  • 在自定义包中安装 pip 时,如何修复 install_requires 列表中的“找不到满足要求的版本”?

    我正在尝试使用 twine 包构建自己的 Python 包 可通过 pip 安装 一切都很顺利 直到我尝试 pip 安装我的实际包 所以在上传到 PyPi 之后 所以我首先运行 python3 setup py sdist bdist wh
  • 在 Android 上使用图像精灵

    我有一个图像 588x449 精灵 其中包含不同团队徽标的集合 在 Android 中 我有相应的 ImageView 显示此内容
  • C# 创建目录并设置权限

    我尝试使用下面的代码来允许所有用户都能够修改文件夹 class Program private const string FileName test txt private static readonly string FilePath E
  • 使用 Python 在 Mac 上自动化 Outlook

    我可以使用 win32 COM 在 Windows 上自动化 Outlook 但是有人知道在 mac osx 上执行相同操作的纯 python 方法吗 一个简单的用例是 打开 Outlook 连接到活动实例 启动空白的新电子邮件 我想创建一
  • OsX 下的 xargs -r 相当于什么

    它们在 OSX 下是否等同于xargs r在Linux下 我正在尝试找到一种在没有数据的情况下中断管道的方法 例如 假设您执行以下操作 touch test cat test xargs r echo content 这不会产生任何结果 因
  • 动画填充模式不起作用

    我试图让标题飞入 然后当你将其悬停时 它应该摇动 都带有 css3 动画 它以我想要的方式飞行 也会晃动 但是在我将鼠标从元素上移开后 它会回到原来的右边距 在飞入动画之前 即使我设置了 animation fill mode forwar
  • Spring Boot 中的 WebMvcTest

    我有一个基本的 Spring Boot 应用程序 嵌入式 Tomcat Thymeleaf 模板引擎 并打包为可执行 JAR 文件 我有这门课 Service public class I18NService The application
  • Spring Security 3.2.0RC2 注销 url 仅 POST?

    我正在使用 javaconfig 尝试 Spring Security 3 2 0 RC2 似乎注销 url 仅是 POST 这是设计使然吗 有什么方法可以让它通过 GET 请求注销用户吗 protected void configure
  • 将元组添加到地图?

    使用 Scala 2 11 8 我可以附加一个key value通过以下方式与地图配对 scala gt Map 1 gt 1 2 gt 2 res8 scala collection immutable Map Int Int Map 1
  • 提取指定位置的字符

    我试图找到一个函数来提取字符串中某个位置的字符 例如 我有一个包含日期的长文件名 我只想以日期结束 LT50420331984221PAC00 B7 tif 我只想要 1984221 部分 我想出了一个复杂的函数 但想知道是否有更优雅的解决
  • 删除的图像仍然显示在 Android 图库中,直到我重新启动模拟器

    我正在删除一个文件 File fileToDelete new File filepath Boolean fileDeleted fileToDelete delete fileDeleted 是 true 当我检查 DDMS 时 文件不
  • 远程源已存在于新存储库的“git Push”上

    我在 GitHub 上的某个位置有我的项目 email protected myname oldrep git 现在我想将所有代码推送到其他位置的新存储库 email protected newname newrep git 我使用了命令
  • EF6 Code First - 可能会导致循环或多个级联路径

    我正在使用 EF6 代码优先 我有两节课 public class Player DatabaseGeneratedAttribute DatabaseGeneratedOption Identity Key public int Id g
  • 在 HttpSessionListener 中如何获取 HttpServletRequest?

    如何从 SessionListener 访问请求标头 我需要在创建当前会话时为其设置超时 超时需要根据 HttpServletRequest 中的标头而变化 我已经有一个 SessionListener 实现 HttpSessionList
  • Python 中的字符串相似度度量[重复]

    这个问题在这里已经有答案了 我想找到两个字符串之间的字符串相似度 维基百科有其中一些例子 code google 有一个 Python 实现编辑距离 在这些限制下 是否有更好的算法 希望有一个 Python 库 我想在字符串之间进行模糊匹配
  • 有人在 tomcat 控制台上写了一条消息

    我在 Tomcat 7 上部署了一个应用程序 今天早上我注意到 Tomcat 控制台上有两条消息 你在 stderr 窗口看到我了吗 您也在浏览器窗口中看到了我吗 有人设法远程写入这些消息 我需要担心吗 有人黑了我的网站吗 thanks F
  • 在 Woocommerce 3 中重命名相关产品标题

    我曾经使用以下功能来更改 Woocommerce 中的相关产品文本 function my text strings translated text text domain switch translated text case Relat
  • 对目录文件进行排序并获取最大的文件名

    我有一个包含 40 个文件的目录 文件名从 0 到 39 例如 我正在尝试获取名称中数字最大的文件 这意味着我需要获取 39 我正在尝试对目录进行排序 我尝试过使用以下主题 如何检索目录中按名称排序的文件列表 在 C 中对 Director
  • 类型错误:无法读取未定义的属性(读取“$router”)vuejs

    因此 如果 api 调用返回状态 422 我尝试将用户重定向到不同的路线 但我收到错误 TypeError Cannot read properties of undefined reading router 我的routes js pat