我正在开发一个简单的聊天应用程序来熟悉node / angular,但我通常是一名PHP开发人员。我现在要做的就是这样做,如果有人要去一个不存在的房间,他们会收到一个简单的页面"房间不存在"错误信息。但如果确实存在,他们就可以加入这个房间。
现在,我一直在做的是在视图中使用ngIf
来显示错误消息,如果服务器响应它不存在并显示聊天(如果有的话)存在。
我只是不太关心它的运作方式。也许这只是因为我的正常背景,但纯粹根据数据返回的方式将相同的视图用于多种目的感觉很奇怪。它看起来非常像一个不太优雅的解决方案。
我将此作为带有ngRoute的单页应用程序使用。有没有办法通过路线或其他方法,我可以在路线开火和重定向之前检查房间?
答案 0 :(得分:2)
在应用的运行块中,您可以观看$routeChangeStart
事件,无论何时开始更改路线,都会触发该事件。现在是在新路由加载之前处理所需逻辑的好时机。
$ routeChangeStart:路由更改前广播。此时此刻 路由服务开始解决所需的所有依赖关系 路线改变发生。通常,这涉及获取视图 模板以及解析路由中定义的任何依赖项 属性。一旦解决了所有依赖关系 $ routeChangeSuccess被触发。
您可以调用event.preventDefault()
让路由更改中止,并允许您运行所需的任何逻辑。然后,您可以根据逻辑解析的方式有条件地路由到您需要的任何位置。
您可以这样做:
app.run(function($rootScope, $location) {
$rootScope.$on("$routeChangeStart", function (event, next, current) {
event.preventDefault();
if (myRoom) {
$location.path('myRoom')
} else {
$location.path('noRoom');
}
});
如果我没记错的话,您可能需要在$ timeout函数中包含$ location更改以使其触发。
$timeout(function() {$location.path('myRoom')},0);
注意:您可以在next
事件的$routeChangeStart
参数中访问有关您前往的路线的详细信息,因此,如果您需要获取有关他们尝试导航到哪个房间的详细信息,你可以从那里得到它。