gpt4 book ai didi

Angular 2对象取消订阅错误

转载 作者:太空狗 更新时间:2023-10-29 17:39:43 26 4
gpt4 key购买 nike

我正在开发用于使用 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;
}
}

当我第一次登录时,它工作正常。但是当我注销并尝试再次登录时,它给了我错误: enter image description here

最佳答案

我有一个类似的问题,并通过将 *ngIf 替换为 [hidden] 来“解决”它。

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

关于Angular 2对象取消订阅错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40015165/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com