首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将登录按钮更改为角13中的注销。

将登录按钮更改为角13中的注销。
EN

Stack Overflow用户
提问于 2022-11-24 13:34:29
回答 2查看 35关注 0票数 -1

我有一个有两个按钮的简单列表。我希望能够显示其中一个或另一个取决于我是否登录。

代码语言:javascript
复制
<div>
                <li class="nav-item">
                  <button *ngIf="token === ''" type="button" class="btn btn-dark btn-lg fs-4" (click)="login()">Inicia sesión</button>
                  <button *ngIf="token != ''" type="button" class="btn btn-dark btn-lg fs-4" (click)="logout()">Cerrar sesión</button>
                </li>
              </div>

我尝试简单地放置ngIf,但它并没有使它即时,此外,由于登录在另一个组件中,我真的不知道如何从那里改变它。

这是我的组成部分:

代码语言:javascript
复制
import { Component, ElementRef, ViewChild} from '@angular/core';
import { Router } from '@angular/router';
import { faHamburger } from '@fortawesome/free-solid-svg-icons';
import { UsersService } from './services/user.service';

@Component({
  selector: 'app-root',
  templateUrl: './app.component.html',
  styleUrls: ['./app.component.css']
})
export class AppComponent {
  title = 'my-app';
  token = this.userService.getToken();

  @ViewChild('clickLogout')clickLogout:ElementRef;

  faHamburger = faHamburger;

  constructor(public userService: UsersService, public router: Router) { }
  
  logout(){
    this.userService.logout();
    
    this.router.navigateByUrl('/login');
  }

  login(){
    this.router.navigateByUrl('/login');
  }
  
}

因此,每当我需要一个按钮或另一个按钮时,我都需要重新加载页面,当我登录或退出时,我需要它立即重新加载页面。

EN

回答 2

Stack Overflow用户

发布于 2022-11-24 13:41:28

试着在html中使用,

代码语言:javascript
复制
<div *ngIf="token === ''; else empty">
      <button type="button" class="btn btn-dark btn-lg fs-4" 
       (click)="login()">Inicia 
       sesión</button>
    </div>

    <ng-template #empty>
     <button type="button" class="btn btn-dark btn-lg fs-4" 
      (click)="logout()">Cerrar sesión</button>
    </ng-template>

在ts中,调用ngOnInit方法中的令牌并更改路由(导航时/login为/logout ):

代码语言:javascript
复制
export class AppComponent implements OnInit {
//code...
token=''
ngOnInit(): void {
this.token = this.userService.getToken();}
票数 1
EN

Stack Overflow用户

发布于 2022-11-24 15:19:24

您应该使用BehaviorSubject在服务中存储令牌,添加:

代码语言:javascript
复制
public token$ = new BehaviorSubject<string>(null);

然后,当您收到令牌值时使用this.token$.next(valueFromRequest);,并使用this.token$.next(null);重置它。

在html代码中,以这种方式使用ngIf:

代码语言:javascript
复制
<button *ngIf="(userService.token$ | async)" type="button" [...]>Logout</button>
<button *ngIf="!(userService.token$ | async)" type="button"[...]>Login</button>
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74561631

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档