当用户在登录后被重定向到仪表板时,我想使用那个简单的 UI 模式。
因此,如果用户注销 - 他只能看到一个主页。登录后,他被重定向到 /dashboard。
如何使用 angular2 路由器和流星帐户包做到这一点?
提前感谢您的帮助。
当用户在登录后被重定向到仪表板时,我想使用那个简单的 UI 模式。
因此,如果用户注销 - 他只能看到一个主页。登录后,他被重定向到 /dashboard。
如何使用 angular2 路由器和流星帐户包做到这一点?
提前感谢您的帮助。
不幸的是,accounts-ui 包似乎没有公开生命周期挂钩或任何其他明显的方式来在登录和注销方法被触发时运行额外代码。
所以这也不是最优雅的解决方案,但它可以使用 angular2-meteor-accounts-ui(在 GitHub 和 NPM 上可用):
import { Component, DoCheck } from '@angular/core';
import { Router, ROUTER_DIRECTIVES } from '@angular/router';
import 'rxjs/Rx';
import { Meteor } from 'meteor/meteor';
import { MeteorComponent } from 'angular2-meteor';
import { InjectUser, LoginButtons } from 'angular2-meteor-accounts-ui';
import template from './app.component.html';
@Component({
selector: 'app',
template,
directives: [ LoginButtons, ROUTER_DIRECTIVES ]
})
@InjectUser('user')
export class AppComponent extends MeteorComponent implements DoCheck {
private isLoggedIn: boolean = false;
private user: Meteor.User;
constructor( private router: Router ) { super(); }
ngDoCheck() {
if (!this.isLoggedIn && !!this.user) {
this.isLoggedIn = true;
if (this.router.url === '/') {
this.router.navigate( ['/dashboard'] );
}
} else if (this.isLoggedIn && this.user === null) {
this.isLoggedIn = false;
if (this.router.url === '/dashboard') {
this.router.navigate( ['/'] );
}
}
}
}
Meteor 论坛上也有一篇文章描述了一种不同的解决方案,不使用 accounts-ui 包,而是创建自己的 login() 方法,这里:
这可能不是最优雅的解决方案,但我最终在登录后使用自动运行来重定向用户。
$scope.autorun(() => {
let currentUser = Meteor.user();
if (currentUser)
$state.go('home');
});