Angular ui-router 中的$state.go()报错?

发布于 2022-09-02 20:36:00 字数 558 浏览 23 评论 0

当我不在回调函数中使用$state.go时,我的$state.go()正常工作

当我写了一个service,并把$state.go()写入success函数中时就会报错。

Cannot read property 'go' of undefined

下面是部分代码


$scope.logOut = function($state) {
    logOutService.logout().success(function() {
        alert('hahahhahah');
        ls.remove("userdata");
        $state.go('login');// 这一句报错
        $rootScope.isLogin = false;
    }).error(function() {
      alert('登出失败');
    })
}

有没有遇到相似问题的? 我在stackoverflow上找到的答案尝试了都没什么用。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

や莫失莫忘 2022-09-09 20:36:00

你需要在controller里注入$state服务,在controller内都调用注入的$state,而不是再声明一次。
要理解这点,你可能需要了解一下什么叫做“依赖注入”。
并且,似乎你需要理解Javascript中变量的作用域,或者说是闭包的概念。被注入的$state的作用域,涵盖整个Controller,包括Controller内的各种函数内。
从本质上说,你在函数中声明了一个名为$state的参数,也就是覆盖了外部作用域那个被你注入的$state,所以在函数内部用$state就会出问题。解决方法就是不要声明这个参数。

枉心 2022-09-09 20:36:00

你的success回调里干嘛要重置$state变量啊?

success(function($state)

把这个变量去掉,再试试

补充

$scope.logOut = function($state) {
      //你这里在调用方法时,有手动传入$state参数么?没有的话你这是玩的什么?
     //依赖注入也不在这做啊,应该写在controller里
      logOutService.logout().success(function($state) {
         //这里就更想入非非了了,我就不信你的logOut返回的是$state?
         alert('hahahhahah'); 
         ls.remove("userdata"); 
         $state.go('login');// 这一句报错
         $rootScope.isLogin = false;
     }).error(function() { 
         alert('登出失败'); 
     })
}

综上所述,我恐怕你并没玩明白依赖注入,可以看看跟我手写依赖注入

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文