Meine Komponente hat ein Abonnement für einen Dienst, der eine API aufruft, um einige Werte zu erhalten. Vor dem API-Aufruf möchte ich überprüfen, ob mein AppStore bereits diese Daten enthält, um einen nutzlosen Anruf zu vermeiden, aber ich finde keinen Weg, ihn zum Laufen zu bringen.eckig 2 HTTP-Anfrage nur nach ngrx Store-Check
Wie kann ich es tun?
Dies ist meine Komponente:
import { UserService } from '../../core/user.service';
@Component({
...
})
export class AnagraficaComponent implements OnInit {
userData: any;
constructor(private userService:UserService) { }
ngOnInit() {
this.userService.getUserData(1)
.subscribe(result => {
this.userData = result;
});
}
}
Und das ist mein Service:
import { CURRENT_USER } from '../app.actions';
interface AppStore {
currentUser: any;
}
@Injectable()
export class UserService {
currentUser: Observable<any>;
constructor(private http: Http, private store: Store<AppStore>) {
this.currentUser = store.select('currentUser');
}
getUserData(id: number): Observable<any> {
// TODO: user store
// check if there is a current user in store (means is already logged in)
// if true return data from store
/*
return this.currentUser
.map(user => {
return user;
});
*/
// else return data from server
let currentUser = JSON.parse(localStorage.getItem('currentUser'));
let headers = new Headers({ 'Content-Type': 'application/json' });
headers.append('Authorization', 'Bearer ' + currentUser.token);
let options = new RequestOptions({ headers: headers });
return this.http.get(myGlobals.API_URL + 'user/' + id, options)
.map((response: Response) => {
// TODO : check response
// update store with current user from server
// this.store.dispatch({ type: CURRENT_USER, payload: userData });
return response.json().data;
});
}
}
muss ich es gegen den Laden zu überprüfen, weil es sich um ein Verfahren, das ich werde den Einsatz im gesamten App bin und ich möchte haw Speicher arbeitet in ng App verstehen. Das Testen gegen den lokalen Speicher ist keine erwünschte Option. –