0

Я использую @ Угловой/HTTP GET для извлечения данных с сервера, вот мой код:Угловые 2 - HTTP GET вернуть неправильный объект

private _currentPT: any; 
public phongtroDetailChange = new Subject(); 

layPhongtro(id: number): Promise<any> { 
return new Promise((resolve, reject) => { 
    this.http 
    .get(Constants.apiUrl + 'phongtro/' + id, { headers: Constants.headers }) 
    .map((resp: Response) => resp.json()) 
    .subscribe(resp => { 
     console.log(resp); 
     // if (!resp.result) { 
     // this._currentPT = resp; 
     // this.phongtroDetailChange.next(true); 
     // resolve(resp); 
     // } else { 
     // this.handleError('layPhongtro', resp.result); 
     // reject(resp.result); 
     // } 
    }, 
    error => this.handleError('layPhongtro', error)); 
}); 
} 

Когда я прокомментировал подобный код, свойство «tiencoc» из соответственно имеет правильное значение, которое означает, что его значение равно 0, здесь картина console.log

https://i.stack.imgur.com/7oYGW.png

Но когда я раскомментировать, значение «tiencoc» такой же, как собственность «giatien», в настоящее время его значение равно 1000000, вот изображение console.log при раскомментировании

https://i.stack.imgur.com/rGxdI.png

Я не знаю, почему? Pls помочь мне, спасибо большого

P/S: Я проверил с POSTMAN и соответственно в порядке, что означает значение «tiencoc» 's является 0

+0

Можете ли вы раскомментируйте и изменение 'console.log (соответственно)' в 'console.log (JSON.stringify (соответственно)) ; 'и сказать, что такое значение tientoc? – echonax

+0

Привет @echonax, значение «tiencoc» теперь 0, можете ли вы объяснить мне причину? –

ответ

0

Вот скрипка для демо: https://jsfiddle.net/Lg6L8n2m/ (догадки какова ценность до того, как вы посмотрите на журнал :))

Как я уже упоминал это комментарий, когда вы отвечаете на объект ответа, вы печатаете это значение (потому что строки неизменяемы в js). Но без stringify, console.log работает на самом деле несколько «асинхронно», console.log печатает последнее значение, которое имеет объект.

Значит, вы меняете tientoc на 1000000 где-то в вашем коде после вашего console.log. И console.log выдает вам самое последнее значение. Из того, что я вижу, может быть в блоке, где вы подписываетесь на свой вопрос phongtroDetailChange

Предлагаю прочитать Неизменяемость в javascript об этой проблеме.

+0

@NhatDang без проблем. Посмотрите скрипку на мой ответ, чтобы понять, что я имею в виду. – echonax

+0

да, вы правы, я подписываюсь Тема phongtroDetailИзменить в дочернем компоненте и изменить значение, вы можете прочитать мой ответ :) –

+0

Извините, вы можете прочитать мой ответ и объяснить мне больше :(, я все еще не могу его получить, currentPT of ptService = resp в функции layPhongtro , а затем в дочернем компоненте я храню его с этим.currentPT, я просто изменяю значение this.currentPT, только переменная дочернего компонента –

0

Благодаря @echonax, я читаю «неизменность в JavaScript» сейчас :) И кстати, я обнаружил, что в детском компоненте я сделал это:

constructor(private ptService: PhongtroService) { 
    this.init(); 
    } 

ngOnInit() { 
    this.ptService.phongtroDetailChange.subscribe(result => { 
     if(result) { 
     this.init(); 
     } 
    }); 
} 
init() { 
    this.currentPT = this.ptService.currentPT; 
    if(!this.currentPT.tiencoc || this.currentPT.tiencoc === 0) { 
    this.currentPT.tiencoc = this.currentPT.giatien; 
    } 
} 

Я хранил currentPT из ptService в currentPT детского компонента (this.currentPT), а затем изменить значение this.currentPT

и ptService

private _currentPT: any; 
get currentPT(): any{ 
return this._currentPT; 
} 
set currentPT(pt) { 
this._currentPT = pt; 
} 

и в функции layPhongtro выше

this._currentPT = resp; 
this.phongtroDetailChange.next(true); 

Некоторые, как, каким-то образом код в детской компонент также влияет на эту Респ

+0

Можете ли вы обновить свой вопрос, где вы подписались на 'phongtroDetailChange', пожалуйста? – echonax

+0

@echonax: Я обновил свой ответ, я подписался на phongtroDetailИзменить в ngOnInit() дочернего компонента –

+0

хорошо нормально, тогда есть ваш ответ. Вы изменяете значение объекта, когда выполняете '.next (true)'. Вот почему 'tientoc' приходит как 0, но регистрируется как 100000 – echonax

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