2017-01-24 2 views
0

Я новичок в Angular 2. У меня есть служба, размещенная на моей локальной машине. Сервис отлично работает. Но когда я собираюсь получить данные из службы в моем Angular 2. Как показано ниже: данные были успешно восстановлены и вошли в мою консоль. Но когда я собираюсь показать ценности на мой взгляд. «This.myPurchaseItems» пуст. Почему это? пожалуйста помоги. thanksСлужба в Angular 2 не сохраняет значения в компоненте html

calling file...... 
this._service.getMyPracticeTest(this.uid).subscribe(data => { this.myPurchaseItems = data }); 
------------------------------------------------------ 

service.ts file..... 
getMyPracticeTest(uid: string){ 
    return this._http.get('http://localhost:49753/RestServiceImpl.svc/getMyPracticeTest/' + uid) 
     .map(res => res.json()) 
     .do(data => console.log("GetMyPracticeTest" + JSON.stringify(data))) 
     .catch(this.handleError); 
} 
------------------------------------------------------ 

<table class="table"> 
     <tr><th>ID</th></tr> 
     <tr *ngFor="let data of myPurchaseItems"> 
      <td>{{data.Purchase_ID}}</td> 
     </tr> 
</table> 

РЕШЕНИЕ к проблеме.

getMyPracticeTest(uid: string){ 
    return this._http.get('http://localhost:49753/RestServiceImpl.svc/getMyPracticeTest/' + uid) 
    .map(data => { 
     data.json(); 
     // the console.log(...) line prevents your code from working 
     // either remove it or add the line below (return ...) 
     console.log("I CAN SEE DATA HERE: ", data.json()); 
     return data.json(); 
} 
+0

Предполагая, что 3-й файл представляет собой представление для первого файла, вы просто имеете несоответствие имени с ошибкой «myPurchaseItems» и «myTestData» – matmo

+0

. это myPurchaseItems. – wal

+0

Если ваши данные представляют собой массив, то он должен работать нормально в теории. Вы случайно заменили ChangeDetectionStrategy на OnPush? Если нет, все должно работать в соответствии с вашим примером. Трудно комментировать дальше без plunkr. – matmo

ответ

0

Вам не нужно много ходить здесь, но в последнее время у меня были проблемы с моим *ngFor привязок называть его так, как вы есть. Вместо того, чтобы попробовать этот

<tr *ngFor="let Purchase_ID of myPurchaseItems.data"> 
    <td>{{Purchase_ID}}</td> 
</tr> 

, что сделал это для меня, если это не работает, разместить код для компонента и обслуживания, чтобы мы могли лучше посмотреть на то, что вы делаете.

0

Ранее у меня была аналогичная проблема, проблема заключалась в том, что обнаружение изменений не запускалось.

Вы можете попробовать это, внутри компонента конструктора

constructor(private cdRef:ChangeDetectorRef) { } 

Внутри вашего блока завершения

this._service.getMyPracticeTest(this.uid).subscribe(data => 
{ 
    this.myPurchaseItems = data; 
    this.cdRef.detectChanges(); 
}); 

ChangeDetectorRef импортируется из @angular/core

Вы можете прочитать больше о ChangeDetectorRefHere

+0

зачем делать это, а не искать причину? –

+0

Я учусь, я потратил много дней, пытаясь найти проблему, почему мой пользовательский интерфейс не будет обновляться после звонка в базу данных «Firebase», даже спрошенную на SO, но безрезультатно. Это закончилось использованием «ChangeDetectorRef» или «NgZone». ОП всегда может попробовать то, что я предложил, и если это сработает, тогда мы можем копать немного глубже, никакого вреда в попытках, я думаю. –

Смежные вопросы