2017-10-21 1 views
0

Ich kann Daten in meiner Vorlage nicht wiedergeben, seit Eigenschaft: product = {} leeres Objekt zurückgibt.Angular 2-Abonnement, das leeres Objekt zurückgibt

ProductComponent.ts --->

{ 
    category$; 

    product={}; 

    id; 

    constructor(

     private router:Router, 

     private route:ActivatedRoute, 

     private categoryService:CategoryService, 

     private productService:ProductService) 

     { 

     this.category$= categoryService.getCategories(); 

     this.id=this.route.snapshot.paramMap.get('id'); 

     if(this.id)   
      this.productService.getProduct(this.id).take(1) 
      .subscribe(p=>this.product=p);  

     console.log(this.product) 
     } 

this.product zeigt null. Obwohl ich "p" innerhalb des Abonnements logge, gibt leeres Objekt zurück. Aber nur nicht außerhalb des Abonnements. Ich bin nicht in der Lage, Produktdaten auf Vorlage auch wegen dieses leeren Objekts zu erhalten.

TEMPLATE --->

<label for="title">Title</label> 
    <input #title="ngModel" [(ngModel)]="product.title" name="title" 
    id="title" type="text" class="form-control" required> 
    <div class="alert alert-danger" *ngIf="title.touched && title.invalid"> 
     Title is required 
    </div> 

HELP !!

Unten ist mein Product

import { AngularFireDatabase } from 'angularfire2/database'; 
import { Injectable } from '@angular/core'; 

@Injectable() 
export class ProductService { 

    constructor(private db: AngularFireDatabase) { } 

    create(product){ 
    return this.db.list('/products').push(product); 
    } 

    update(productId, product) 
    { 
    return this.db.object('/products/' + productId).update(product); 
    } 
    deleteProduct(productId){ 
    this.db.object('/products/' + productId).remove(); 
    } 
    getAll(){ 
    return this.db.list('/products'); 
    } 
    getProduct(id){ 
    return this.db.list('/products/' + id); 
    } 


} 
+0

Sie haben die Methode, die Sie in Ihrem Dienst implementiert debuggen 'getProduct (this.id) '. teile den Code dieser Methode. oder den vollständigen Code Ihres Dienstes – HDJEMAI

+0

Was passiert, wenn Sie geschweifte Klammern verwenden ?: 'if() {// code here}' Könnten Sie ein Snippet von 'ProductService' mit der Methode' getProduct() 'teilen? – stealththeninja

Antwort

0

wie Try this:

Druck der Konsole innerhalb der abonnieren Methode

if(this.id) { 
    this.productService.getProduct(this.id).take(1) 
     .subscribe(p => { 
      this.product = p 
      console.log('this.product', this.product); 
     }); 
} 
+0

this.product wird auf das Produktobjekt im Abonnement festgelegt, wie Sie vorgeschlagen haben. Wenn dieses Produkt jedoch außerhalb verwendet wird, ist es leer. Auch die Reihenfolge der ausgeführten Anweisungen: Angular läuft im Entwicklungsmodus. Rufen Sie enableProdMode() auf, um den Produktionsmodus zu aktivieren. product-form.component.ts: 30 {} product-form.component.ts: 28 this.product (4) [{...}, {...}, {...}, {...}] – Chaitanya

+0

Verwenden Sie setTimeout außerhalb der subscribe-Methode: wie setTimeout (() => { console.log ('this.product', this.productt); }, 1000) – Chandru

+0

Überprüfen Sie diese Antwort https://stackoverflow.com/questions/46860230/unable- zu abonnierte Daten in eine Variable? hoffe es wird hilfreich sein – Chandru

Verwandte Themen