2017-03-05 46 views
0

我正在嘗試angular2和打字稿中的項目,並且我遇到了一些莫名其妙的問題。出於某種原因,我無法將數據分配給類屬性。angular2打字稿不能分配給this.object屬性

我有一雙這樣定義類的屬性:

public loadResultMessages: string[]; 
public book: Book; 

我有一個方法,其中我打電話這樣的服務:

getBookByCode() { 

    this.http.get('/api/book/loadbycode?code=' + this.bookCode) 
     .subscribe(result => { 

      var object = result.json(); 

      console.log(object); 

      this.loadResultMessages = object.loadResultMessages; 
      this.book = object.book; 

    }); 
} 

我覈實,我得到數據返回到對象中,但即使嘗試將數據分配給這兩個屬性後,它們也會說未定義。怎麼可能?

編輯:好吧,我搞亂了Visual Studio 2017並在我的JavaScript中設置斷點。我對變量進行了調整,它告訴我他們沒有定義。但是,當我將它們註銷到控制檯時,它們將被填充。其他變量我可以鼠標懸停,並顯示結果。我不確定這是否是某種時間問題或VS中的錯誤?

我想我也遭受了一些重大的緩存問題。只是將額外的console.log()調用放在那裏突然讓我的代碼開始工作。

+1

才能添加'的console.log(對象)的結果;'這裏?如果它是'[Object object]',請嘗試'console.log(JSON.stringify(object))'並添加到您的問題中? –

+1

如果您在.html中遇到錯誤,請嘗試實例化書籍:Book = new Book(...) – Habeeb

+0

我認爲我們需要更多信息,錯誤,console.logs等... – Amit

回答

0

大多數情況下,您的服務應該返回一個對象或對象數組的Observable。

getBookByCode(bookCode) : Observable<any[]> { 

    return this.http.get('/api/book/loadbycode?code=' + bookCode) 
        .map((response: Response) => <any[]>response.json()) 
        .do(data => console.log("data we got is " + JSON.stringify(data))) 
        .catch(this.handleError); 
    }); 
} 

在你的組件,你應該訂閱它在你的構造函數

constructor(private serviceObject:ServiceName){ 
    this.serviceObject.getBookByCode(this.bookCode) 
        .subscribe(results => this.results = results, 
        error =>console.log(error); 
    } 
} 
+0

此答案幫助已滿? – Aravind

+0

我可以再使用一點幫助。我實際上想緩存一個服務屬性中的書籍數組,以便在幾個組件之間共享,並且我無法弄清楚如何調整語法。那麼我只想調用它來填充數組,只有當它還沒有被填充時。那有意義嗎? –

+0

我部分理解。但是需要更多的信息讓我在fb @ aravind2109 – Aravind