Angular 2对象取消订阅错误

2024-01-02

我正在开发一个小项目,用于使用 Angular 2 进行测试,但在登录时出现对象取消订阅错误。

这是我的登录组件:

import {Component, OnDestroy} from '@angular/core';
import {Router} from '@angular/router';
import { Subscription } from 'rxjs/Subscription';
import {Location} from '@angular/common';


import {AuthService} from './services/auth.service';
import {RoutingService} from './services/routing.service';

import {ToastyService, ToastyConfig, ToastOptions, ToastData} from 'ng2-toasty';

import {LoadingBarModule, LoadingBarService} from 'ng2-loading-bar';


@Component({
    selector: 'login',
    template: `
                <loading-bar color="#FF0000" [height]="3" [animationTime]="0.3" [runInterval]="100" [progress]="0"></loading-bar>
                <h3> {{'LOGIN' | translate }} </h3>
                <p> {{Message}} </p>

                <div *ngIf="!authService.isLoggedIn">
                    <input [(ngModel)]="username" placeholder="{{'USERNAME' | translate}}" /><br />
                    <input type="password" [(ngModel)]="password" placeholder="{{'PASSWORD' | translate}}" />
                </div>
                <div>
                    <button (click)="login()" *ngIf="!authService.isLoggedIn">{{'LOGIN' | translate }}</button>
                </div>

                <label class="label label-danger">{{errorMessage}}</label>

                <ng2-toasty [position]="'top-center'"></ng2-toasty>
              `
})

export class LoginComponent implements OnDestroy {
    username: string;
    password: string;
    subscription: Subscription;

    constructor(private authService: AuthService, private router: Router, private toastyService: ToastyService, private toastyConfig: ToastyConfig, private loadingBarService: LoadingBarService, private routingService: RoutingService, private location:Location) {
        this.toastyConfig.theme = 'material';
    }

    login() {

        this.loadingBarService.start();

        this.subscription = this.authService.login(this.username, this.password).subscribe(() => {

            if (this.authService.isLoggedIn) {
                this.toastyService.default('Hi');

                this.routingService.logged = false;

                let redirect = this.authService.redirectUrl ? this.authService.redirectUrl : this.routingService.lang + '/apphomecomponent';

                this.router.navigate([redirect]);
            }
            else {
                this.toastyService.default('Login failed');
            }
        });
    }

    ngOnDestroy() {
        this.subscription.unsubscribe();
    }
}

这是我的 AuthService:

import {Injectable} from '@angular/core';

import {Observable} from 'rxjs/Observable';
import 'rxjs/add/observable/of';
import 'rxjs/add/operator/do';
import 'rxjs/add/operator/delay';



@Injectable()
export class AuthService {
    isLoggedIn: boolean = false;

    redirectUrl: string;

    login(username: string, password: string): Observable<boolean> {
        if (username === 'test' && password === 'test') {
            return Observable.of(true).delay(1000).do(val => this.isLoggedIn = true);
        }
        else {
            return Observable.of(false).delay(1000).do(val => this.isLoggedIn = false);
        }
    }

    logout(): void {
        this.isLoggedIn = false;
    }
}

When I log in first time, it works fine. but when I logout and trying to log in again, it gives me errors: enter image description here


我遇到了类似的问题,并通过用 [hidden] 替换 *ngIf 来“解决”它。

此解决方案不会从 dom 中删除该元素,这可能是导致取消订阅问题的原因,它只是隐藏该元素。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Angular 2对象取消订阅错误 的相关文章

随机推荐