如何为用户登录设置 ngIf 条件 - app-container router-outlet

问题描述

我反复遇到一个问题,我认为这与我的 app.component.html 中的 ngIf 条件有关。这是我的代码

<!-- nav -->
<div class="wrapper" *ngIf="user">
     <div class="sidebar" >
        <sidebar-cmp></sidebar-cmp>
    </div> 
     <div class="main-panel">
        <navbar-cmp></navbar-cmp>
        <div class="content">
            <router-outlet></router-outlet>
        </div>
    </div>
</div> 



<!-- main app container -->
<div class="app-container" [ngClass]="{ 'bg-light': user }" *ngIf="!user">
    <alert></alert>
    <router-outlet></router-outlet>
</div>

这里有两个 ngIf 条件。

如果我只有第一个,那么当我注销时,我无法重定向到我的登录屏幕。发生的情况是导航栏和侧边栏消失了,但页面本身仍然存在,尽管 URL 说它在登录时。路由器插座不会消失。

如果我只有第二个,那么我的侧边栏链接不起作用,路由器插座基本上是空白的。

如果我同时满足这两个条件,那么一旦登录并使用侧边栏,URL 会更改但页面不会加载。

如果我没有任何条件,那么导航栏和侧边栏会出现在登录屏幕上,而它们不应该出现。

帮助!

我对 Angular 还不是很精通,所以我希望在这里有一些指导。

我最近的想法是拥有一个 *ngIf user; else 的东西。我不知道。我该如何解决这个问题?

解决方法

我解决了!这个问题正是我在想的,但无法让它起作用,但现在它起作用了!!

How to use *ngIf else?

这是解决方案:

<div class="wrapper" *ngIf="user; else loggedOut">
    <div class="sidebar">
        <sidebar-cmp></sidebar-cmp>
    </div>
    <div class="main-panel">
        <navbar-cmp></navbar-cmp>
        <div class="content">
            <router-outlet></router-outlet>
        </div>
    </div>
</div>


<ng-template #loggedOut>
    <div class="app-container" [ngClass]="{ 'bg-light': user }">
        <alert></alert>
        <router-outlet></router-outlet>
    </div>
</ng-template>

呜呜呜!

,

我的建议是使用守卫。

然后,您可以将用户重定向到登录页面或经过身份验证的页面,具体取决于用户是否存在(已通过身份验证)。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...