【发布时间】:2016-04-02 12:15:04
【问题描述】:
我想在用户单击注销按钮后重新加载我的 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 ');
});
}
}
当我第一次加载应用程序的主页时(我将请求发送到 localhost:3000),服务器会检查我是否通过了身份验证,如果没有,它会将我重定向到 localhost:3000/signin 页面。身份验证后,服务器向我发送主页:localhost:3000
当我发送注销请求时,服务器会注销我并返回带有 localhost:3000/signin 页面的答案,因为我还没有登录。
我在 logout(...).subscribe(...) 方法中从服务器获取此页面,但我不知道如何卸载当前页面(应用程序)并让浏览器加载此页面。
【问题讨论】:
-
嗯,这不是一个简单的问题。这取决于您的代码是如何编写的。你能添加一些sn-ps吗?另外查看这篇博文auth0.com/docs/client-platforms/angular2
-
你期望重新加载有什么效果?你为什么想这么做?为什么不改变路线?
-
@ssuperczynski 谢谢 ssuperczynski。我会检查的。
-
@GünterZöchbauer 我希望该应用程序能够清除当前用户使用过的所有数据以及浏览器以加载登录页面。因为在我的场景中,用户已经完成了他对应用程序的工作,我需要关闭他的会话并将应用程序设置为初始状态。我试图改变路线,但它没有改变。 Sertanly,我做错了什么,但我不知道是什么。
标签: angular