我想在用戶單擊註銷按鈕後重新加載我的Angular 2應用程序,也就是我想清除應用程序中的所有當前數據並從服務器。如何在用戶註銷後重新加載Angular 2應用程序
現在,在單擊註銷按鈕後,我從我的訂閱方法中的服務器(使用簽名形式)獲取答案,但我不知道如何清除當前應用程序的數據並加載登錄表單。
任何人都可以幫助我嗎?
這是我的主類AppComponent
import {Component} from 'angular2/core';
import {OnInit} from "angular2/core";
import {Router} from "angular2/router";
import {RouteConfig} from "angular2/router";
import {AuthRouteOutlet} from "./common/directives/auth-router-outlet.directive";
import {AuthService} from "./common/services/auth.service";
import {DashboardComponent} from "./common/components/dashboard.component";
@Component({
selector: 'my-app',
template: `
<auth-router-outlet></auth-router-outlet>
`,
directives: [AuthRouteOutlet, DashboardComponent]
})
@RouteConfig([
{path: '/dashboard/...', name: 'Dashboard', component: DashboardComponent, useAsDefault: true}
])
export class AppComponent implements OnInit {
constructor(
private _router: Router,
private _authService: AuthService
) {}
ngOnInit():any {
var self = this;
this._authService.getLoggedOutEvent().subscribe(function(next) {
//console.log('AppComponent OnEmit: ' + JSON.stringify(next));
self._router.navigateByUrl('/', true);
});
}
}
這是我的服務。我從這裏發送註銷請求。
import {Injectable, EventEmitter} from 'angular2/core';
import {User} from "../models/user.interface";
import {Http} from "angular2/http";
import {Observable} from "rxjs/Observable";
import {Headers} from "angular2/http";
@Injectable()
export class AuthService {
private _userLoggedOut = new EventEmitter<any>();
constructor(private _http: Http) {}
getLoggedOutEvent(): EventEmitter<any> {
return this._userLoggedOut;
}
logout(): Observable<any>{
return this._http.get('/logout');
}
}
這是我從中調用註銷方法的組件。
import {Component} from "angular2/core";
import {ROUTER_DIRECTIVES, Router} from "angular2/router";
import {AuthService} from "../services/auth.service";
@Component({
selector: 'mdm-header-bar',
template: `
<header>
<nav id="mdm-header-bar" >
<ul>
<li><a (click)="addComponent()" title="Add component"><i class="fa fa-plus-circle"></i></a></li>
<li><a (click)="settings()" title="Settings"><i class="fa fa-cog"></i></a></li>
<li><a (click)="help()" title="Help"><i class="fa fa-question-circle"></i></a></li>
<li><a (click)="logout()" title="Logout"><i class="fa fa-sign-out"></i></a></li>
</ul>
</nav>
</header>
`,
directives: [ROUTER_DIRECTIVES]
})
export class HeaderComponent {
constructor(private _authService: AuthService) {}
logout() {
var self = this;
this._authService.logout()
.subscribe(function(next) {
self._authService.getLoggedOutEvent().emit(next);
}, function(exception){
console.log('HeaderComponent OnException: ' + exception);
}, function() {
console.log('HeaderComponent OnCompleted ');
});
}
}
當我加載應用程序的主網頁第一次(我發送到本地主機請求:3000),服務器會檢查我驗證的,如果不是,它重定向我到本地主機:3000 /登錄頁面。驗證後,服務器向我發送主頁面:localhost:3000
當我發送註銷請求時,服務器會註銷我並返回localhost:3000/signin頁面的答案,因爲我尚未登錄。 (...)。subscribe(...)方法,但我不知道如何卸載當前頁面(應用程序),並獲取瀏覽器加載此頁面。
好吧,這不是一個容易的問題。這取決於你的代碼是如何寫入的。你可以添加一些片段嗎?此外,請查看此博文https://auth0.com/docs/client-platforms/angular2 – ssuperczynski
您希望重新加載什麼效果?你爲什麼想這麼做?爲什麼不改變路線? –
@ssuperczynski謝謝ssuperczynski。我會仔細檢查。 – Alexander