[英]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.