2016-05-26 2 views
0
<a class='btn btn-primary' (click)='onSave()' style='width:80px'> 
<i class='glyphicon glyphicon-chevron-right'></i> Save 
</a> 

У меня есть выше вызов метода машинопись, как показано нижеAngular2 линия выпуска исполнения

onSave(): void { 

     // this.SaveShipment(); 
     console.log("before Saving"); 
     let id = this.shipments.findIndex(i=> i.id === parseInt(this._routeParams.get('id').toString())); 
     this.shipments.splice(id,1); 
     this._shipmentService.saveShipment((id+1).toString(), this.shipment) 
     .subscribe(shipment=> this.shipments.push(shipment)); 
     this._router.navigate(['ShipmentDetails',{'id':this._routeParams.get('id').toString()}]); 
} 

Последняя строка вызывается первым, прежде чем что-нибудь случится. Может ли кто-нибудь помочь в этом? Заранее спасибо.

+0

И что должно произойти? – dfsq

ответ

0

Последняя строка не называется первой.

Этот код, вероятно, не работает так, как вы ожидаете. Это асинхронной код и только графики код для последующего выполнения:

this._shipmentService.saveShipment((id+1).toString(), this.shipment) 
    .subscribe(shipment=> this.shipments.push(shipment)); 

Эта строка выполняется после того, как приведенный выше код был запланирован на исполнение:

this._router.navigate(['ShipmentDetails',{'id':this._routeParams.get('id').toString()}]); 

Это может быть то, что вы хотите:

this._shipmentService.saveShipment((id+1).toString(), this.shipment) 
    .subscribe(shipment=> { 
    this.shipments.push(shipment); 
    this._router.navigate(['ShipmentDetails',{'id':this._routeParams.get('id').toString()}]); 
    }); 

Этот способ this._router.navigate(...) выполнен после ответа от saveShipment().