提问者:小点点

在Angular 6中仅初始化变量一次,而不是在每次页面刷新后


我正在设计一个基本的网页,登陆页面显示两个链接:第一个是登录,第二个是注册。单击“login”链接(我添加了一个(click)事件),我将路由设置为“/login”(登录表单是一个组件),并使用ngIf隐藏页面上的原始内容。移动到登录组件后,当我刷新页面“localhost:4200/login”时,我使用ngIf隐藏的内容再次显示,因为我在ngIf中使用的变量在刷新时被重新加载为值“true”。

如何解决这个问题?提前感谢:)

应用程序。组成部分ts

export class AppComponent  { 
        myVar = true;
        divReplace = function(){ 
         if(this.myVar == true)
          {
          this.myVar = false;
          }
                               }
                                  }

应用程序。组成部分html

<div class="fullPage">
  <header>Welcome</header>
 </div> 

  <router-outlet></router-outlet>

<div class="fullPage">
 <div *ngIf="myVar">
  <h3>Please login or sign up to continue :))</h3><br>
  <div id="x"><a routerLink="/login" (click)="divReplace()">Login</a> </div>
  <div>New user? <a routerLink="/signup">Sign Up</a></div>
</div>
</div>

登录页

点击“登录”链接后的登录页面

刷新后登录页面

我希望登录表单下显示的内容即使在刷新后也不显示。我甚至尝试使用constructor()和ngOnInit()使变量只初始化一次,但似乎没有任何效果。即使是网络搜索也没有找到解决方案:(

提前感谢!


共2个答案

匿名用户

最简单的方法如下所述:

https://stackoverflow.com/a/36183988/2538449

使用持久值的更高级方法是实现一个服务,返回所需类型的可观察的。例如,我使用这种方法在用户登录后检索和存储基于服务器的用户设置。

匿名用户

使用会话存储信息。这样想一想,您的浏览器如何知道使用组件类中所述内容以外的任何内容初始化该值?HTTP是无状态的,每次刷新都是新的,所以您需要存储和会话。