2017-03-07 60 views
1

在angular2中,好的,簡單的基本身份驗證服務。爲什麼在服務中使用let和new創建新對象時會得到一箇舊對象?

當用戶第一次登錄時,它可以工作。但是當他/她嘗試用另一個帳戶第二次登錄時。我在請求標題中獲得了雙基本驗證字符串,就像「Authorization:Basic YWRtaW46YWJjMTIz,Basic RMcasd9WJjMXoPj」。

這是服務:

@Injectable() 
export class AuthenticationService { 
private url: string = 'http://localhost:8080/api/test'; 
private username: string; 
private password: string; 
private authenticationStatus: boolean = false; 

constructor(private http: Http) { } 

authentication(username: string, password: string): Promise<boolean> { 

    let headers = new Headers(); // <== previous headers object with old Authorization string get back from grave. 
    console.log(headers); 

    headers.append("Authorization", "Basic " + btoa(username + ":" + password)); 
    headers.append("Content-Type","application/json;charset=utf-8"); 

    return this.http.get(this.url, { headers: headers }) 
     .toPromise() 
     .then(response => { ... 

這是我第一次嘗試角/打字稿應用。當我在這裏同時使用let和new時,我感到困惑的是沒有得到一個全新的對象。是否因爲頭類中的headersString是靜態的?我沒有看過角頭類api文檔。我試圖在let headers = new Headers();之後立即致電headers.delete("Authorization");,舊的授權標頭仍然存在。

回答

0

當我在這裏同時使用let和new時,我感到困惑的是沒有獲得一個全新的對象。

當你記錄一個對象時,引用到對象被記錄。

舉個例子:

let x = {}; 
console.log(foo); 
x.foo = 'foo'; 

現在您的控制檯上,如果你看一下X 你突變之後,就會顯示出新的東西:

enter image description here

在短。你的代碼是正確的。控制檯可以騙你。

替代答案:您正在做的事情未在您提供的代碼示例中演示。

相關問題