嗨,我使用的angularjs2 https://angular.io/docs/ts/latest/guide/router.html如何重新載入/刷新angularjs2中的所有當前組件?
新的alpha分量路由器我有一個身份驗證的用戶,然後在localStorage的持有用戶的信息需要創建一個JWT一個模式。
我的問題是,如果用戶正在尋找/home
路徑,那裏只有登錄用戶可見的東西,但是通過模式登錄後,他必須刷新頁面,以便組件刷新並顯示正確的登錄信息
有沒有辦法告訴angular2刷新當前路徑上的所有組件?像重新加載頁面,但並沒有真正重新加載整個頁面(我不想剛打的刷新按鈕,供用戶)提前
感謝
編輯:也許有一個功能來強制重定向當我嘗試重定向到我已經在的路線?
EDIT2:以可觀察
@Injectable()
export class UserService {
private loggedInObservable;
constructor(private http: Http) {
this.loggedInObservable = Observable.of(this.checkIsLoggedIn());
}
checkIsLoggedIn() {
let isLoggedIn = false;
try {
isLoggedIn = tokenNotExpired();
} catch(e) {
}
console.log('returning:', isLoggedIn);
return isLoggedIn;
}
login(model, cbSuccess=null, cbError=null, cbAlways=null) {
serverPost(this, '/api/users/login', model, cbSuccess, cbError, cbAlways, (data)=> {
localStorage.setItem("id_token", data.id_token);
this.loggedInObservable.map((val) => console.log('HELLO?'));
});
}
isLoggedInObservable() {
return this.loggedInObservable;
}
}
地圖做什麼都沒有(對「你好」未顯示),雖然觀察者有一個值映射函數不調用任何嘗試。
使用觀察者:
import {Component, OnInit, OnDestroy} from '@angular/core';
import {UserService} from '../../services/userservice';
@Component({
selector: 'test-thing',
template: require('./test-thing.html'),
styles: [require('./test-thing.scss')],
providers: [],
directives: [],
pipes: []
})
export class TestThing implements OnInit, OnDestroy{
private isLoggedIn = false;
private sub: any;
constructor(private userService: UserService) {
};
ngOnInit() {
this.sub = this.userService.isLoggedInObservable().subscribe(loggedIn => {
this.isLoggedIn = loggedIn;
});
}
ngOnDestroy() {
this.sub.unsubscribe();
}
}
初始值如預期運行,但是當我嘗試登錄成功(配圖)後改變值什麼也沒有發生,什麼都沒有。
要更新登錄信息,不必重新載入所有內容。如果更新數據,則由於角度更改檢測,綁定視圖將更新。 –
@GünterZöchbauer問題是我在'ngOnInit'中設置了'isLogged = x',所以這個變量是按值傳遞的,當不同的模式設置localStorage來保存會話時,我無法改變它。你的意思是使用Observables?我寧願避免強制所有組件訂閱一個更改,但我想它可以這樣工作 – kfir124
我會使用可觀察的。這是一個更清潔的解決方案。您可以訂閱路由器參數更改,並且如果您在一個地方通知有關更改,則整個應用程序會自動更新。 –