[英]How to use Angular Observable
我在使用 http 請求獲取用戶信息到我的 rest api 服務器時遇到問題,我不知道出了什么問題....
當用戶單擊登錄按鈕時,Angular 將使用用戶名和密碼向服務器發送請求,如果正確則返回用戶信息,否則返回 null。 問題是盡管用戶名和密碼正確,但用戶服務中的變量 user 仍然為空。
我不知道如何解決這個問題,所以如果你幫助我,我會很高興! 感謝您的幫助。
REST API:
package cz.flay.fellcms.http;
import cz.flay.fellcms.dao.UsersRepository;
import cz.flay.fellcms.entities.User;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
@CrossOrigin
@RestController
@RequestMapping(path = "/api/users")
public class UsersRestController {
@Autowired
private UsersRepository usersRepository;
Logger logger = LoggerFactory.getLogger(UsersRestController.class);
@CrossOrigin
@GetMapping(path = "/all")
public @ResponseBody Iterable<User> getAll(){
return usersRepository.findAll();
}
@CrossOrigin
@GetMapping(path = "/verify", params = {"username", "password"})
public @ResponseBody User verify(@RequestParam(value = "username") String username, @RequestParam(value = "password") String password){
logger.info("t");
return usersRepository.verify(username, password);
}
}
用戶服務
import { Injectable } from '@angular/core';
import { HttpClient } from '@angular/common/http';
import { User } from '../entities/User';
@Injectable()
export class UserService {
private usersUrl: 'http://localhost:8080/api/users';
user: User;
verifyUrl: string;
constructor(private http: HttpClient) {}
isLoggedIn() {
return this.user != null;
}
isAdmin() {
return this.user.isAdmin;
}
unLoggin() {
this.user = null;
}
login(username: string, password: string) {
this.verifyUrl = 'http://localhost:8080/api/users/verify?username=' + username + '&password=' + password;
this.http.get<User>(this.verifyUrl).subscribe(data => this.user = data);
if (this.user != null) {
return true;
} else {
return false;
}
}
}
您if (this.user !== null)
調用if (this.user !== null)
。 該評估將在請求消失和返回之前被調用。 試試這個:
login(username: string, password: string) {
this.verifyUrl = `http://localhost:8080/api/users/verify?username=${username}&password=${password}`;
return this.http.get<User>(this.verifyUrl)
.map(data => {
this.user = data
if (this.user != null) {
return true;
} else {
return false;
}
});
}
問題是,無論您在何處調用此login
方法,它現在都是您必須訂閱的 observable,而不是同步方法。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.