角度条件路由

时间:2015-05-13 02:48:56

标签: angularjs node.js express socket.io

我正在开发一个简单的聊天应用程序来熟悉node / angular,但我通常是一名PHP开发人员。我现在要做的就是这样做,如果有人要去一个不存在的房间,他们会收到一个简单的页面"房间不存在"错误信息。但如果确实存在,他们就可以加入这个房间。

现在,我一直在做的是在视图中使用ngIf来显示错误消息,如果服务器响应它不存在并显示聊天(如果有的话)存在。

我只是不太关心它的运作方式。也许这只是因为我的正常背景,但纯粹根据数据返回的方式将相同的视图用于多种目的感觉很奇怪。它看起来非常像一个不太优雅的解决方案。

我将此作为带有ngRoute的单页应用程序使用。有没有办法通过路线或其他方法,我可以在路线开火和重定向之前检查房间?

1 个答案:

答案 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参数中访问有关您前往的路线的详细信息,因此,如果您需要获取有关他们尝试导航到哪个房间的详细信息,你可以从那里得到它。