[英]angular2 CanActivate with http
我有一个可以激活的组件
import {isLoggedIn} from '../login/isLoginedIn';
@CanActivate((next, previous) => {
isLoggedIn()
})
我的“ isLoggedIn”如下
import {Http, Headers} from 'angular2/http';
class Auth {
constructor( @Inject(Http) private _http: Api) { }
check() {
this._http.get('/Users/LoggedInUser')
}
}
export const isLoggedIn = () => {
let injector = Injector.resolveAndCreate([Auth, Http]);
let auth = injector.get(Auth);
return auth.check();
};
我无法注入将http作为依赖项的服务。 可以这样做还是有更好的方法呢?
由于CanActivate
是修饰器,而不是OnActivate
或CanDeactivate
因此您可以正确地假定,您无法授权要构造的组件的构造函数依赖项注入。
您正在使用的方法可以使用,但是您的Auth
类上缺少@Injectable()
。
import {Injectable} from 'angular2/core';
import {Http, Headers} from 'angular2/http';
@Injectable()
class Auth {
constructor( @Inject(Http) private _http: Api) { }
check() {
this._http.get('/Users/LoggedInUser')
}
}
这种方法是合理的,我认为除了一些语法上的糖或较小的重构之外,还没有很多改进的方法,并且仍然可以实现相同的可读性/可维护性。
可以用来改善流程并防止潜在错误的另一种方法是在CanActivate
返回可观察的CanActivate
以便导航在决定继续或取消之前将等待Http
请求完成。
@CanActivate((next, previous) => {
return isLoggedIn()
})
或简称
@CanActivate(() => isLoggedIn())
(单语句箭头功能会自动返回)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.