我在一个AnguarJS服务中封装了我的REST API,该服务被注入控制器。相当标准,对。现在我希望该服务拦截任何401响应,并以某种方式触发注销或重新登录提示或其他内容。问题是:该服务无法访问任何范围。播放该错误的最佳方式是什么?我提出了一些想法,但是我对Angular很陌生,想知道是否有人能告诉我这样做的“角度”方法?AngularJS控制器/服务/ http通信
1)我可以让服务充当我的AppCtrl可以侦听的事件池。但是这似乎有点过于复杂。所以:
myService.on('logout', function() {
$scope.isLoggedIn = false;
});
2)我可以注入$ rootScope到服务,并让服务直接修改isLoggedIn
。但这似乎是错误的。我希望明确区分服务服务数据,控制器控制范围和指令与dom之间的差异。 3)我的每一个控制器都可以监视被拒绝的承诺,并且如果原因是401错误,那么到达$范围并将isLoggedIn
设置为false,但显然这个选项很糟糕。
任何帮助?
谢谢。
从哪里注销行动需要发生?用户将如何显示登录表单或通知?是否有重定向? –
@JoshDavidMiller这是一个很好的问题。应该在哪里发生。整个事情是一个单页的应用程序,所以没有重定向。我想象一个控制'ngSwitch'的范围上的'isLoggedIn'变量,或者显示应用程序或登录屏幕的东西。那有意义吗? – nicholas