Как запомнить значение переменной после перезагрузки страницы?

Я хочу запомнить значение переменной loggedIn потому что значение соответствующей функции в appComponent.html зависит от его стоимости. Скажите пожалуйста как это реализовать?

Teamplate компонента приложения:

            <li class="nav-item">
                <a class="btn btn-outline-success"
                   [class.btn-outline-success]="!this.loggedInService.loggedIn"
                   [class.btn-outline-danger]="this.loggedInService.loggedIn"
                   (click)="this.loggedInService.loggedIn ? logout() : logIn()">
                    {{this.loggedInService.loggedIn? 'Exit' : 'Enter'}}
                </a>
            </li>

код компонента приложения:

export class AppComponent implements OnInit {
    constructor(private loggedInService: LoggedinService,
                private router: Router) {
    }

    ngOnInit() {
    }

    logIn(): void {
        this.loggedInService.login();
        if (this.loggedInService.loggedIn) {
            let redirect = this.loggedInService.redirectUrl ? this.loggedInService.redirectUrl :
                '/gallery';
            this.router.navigate([redirect]);
        }
    }

    logout(): void {
        this.loggedInService.logout();
        this.router.navigate(['/']);
    }
}

LoggedinService:

export class LoggedinService implements OnInit {
    redirectUrl: string;
    loggedIn: boolean = false;
    constructor() {}

    ngOnInit(): void  {}

    login(): boolean {
        localStorage.setItem('login', 'true');
        return this.loggedIn = true;
    }

    logout(): boolean {
        localStorage.removeItem('login');
        return this.loggedIn = false;
    }
}

3 ответа

Решение

Вы уже сохранили login после того, как пользователь вошел в LoggedinService"s login метод.

Теперь, даже если вы перезагрузите страницу, вы сможете получить ее оттуда, используя:

// Add this property in your app.component.ts
loggedIn = localStorage.getItem('login');

Это вернет 'true', если пользователь вошел в систему до перезагрузки страницы.

Затем вы можете создать эти классы:

.btn-outline-success {
  background: 'green';
}

.btn-outline-danger {
  background: 'green';
}

А затем в вашем app.component.html динамически использовать эти классы, используя [ngClass] синтаксис такой:

<li class="nav-item">
  <a 
    class="btn" 
    [ngClass]="loggedIn === 'true' ? 'btn-outline-success': 'btn-outline-danger'"
    (click)="this.loggedInService.loggedIn ? logout() : logIn()">
    {{this.loggedInService.loggedIn? 'Exit' : 'Enter'}}
  </a>
</li>

Используйте localalstorage

Пример:

localStorage.setItem('loggedIn', loggedIn);

Для углового 6 пробега:

npm install @ngx-pwa/local-storage@6

Для углового 5 пробега:

npm install @ngx-pwa/local-storage@5

добавьте это в свой модуль приложения:

imports: [ LocalStorageModule, //other module imports here ],

LoginService

export class LoggedinService implements OnInit {
    redirectUrl: string;
    loggedIn: boolean = false;
    constructor(private localStorage: LocalStorage) {}

    ngOnInit(): void  {}

    login(): boolean {
        this.localStorage.setItem('login', 'true').subscribe(res => {
          this.loggedIn = true;
        });
        return this.loggedIn = true;
    }

    logout(): boolean {
        this.localStorage.removeItem('login').subscribe(res => {
          this.loggedIn = false;
        });
        return this.loggedIn = false;
    }
}

Не забудьте добавить импорт

import { LocalStorage } from "@ngx-pwa/local-storage";

проверьте хранилище здесь

Другие вопросы по тегам