2016-07-13 15 views
0

Ich erstelle eine sehr einfache Angular 2-Anwendung mit dem Zweck der CRUD-Produkte. Ich habe eine CreateProductComponent, aber ich habe Probleme beim Instanziieren des Modells, das ich in meiner Ansicht verwenden möchte. Ich erhalte diese Fehlermeldung:How to instanziate Modell Angular 2

enter image description here

Dies ist mein Code:

create-product.component.ts

import { Component, OnInit } from '@angular/core'; 
import { ROUTER_DIRECTIVES } from '@angular/router'; 

import { Product } from '../product' 
import { ProductService } from '../product.service' 

@Component({ 
    moduleId: module.id, 
    selector: 'app-create-product', 
    templateUrl: 'create-product.html', 
    styleUrls: ['create-product.css'], 
}) 
export class CreateProductComponent { 

    model: new Product(1,'2',1); <- error on this line 

    constructor(private productService: ProductService) { } 

    addProduct() {   

     //this.productService.addProduct(this.product); 
    } 
} 

product.ts

export class Product { 

    constructor(
     public ID: number, 
     public Name: string, 
     public Price: number 
    ) { } 
} 

Idealer Ich möchte ein leeres Produkt oder ein Produkt mit defaul Werten erstellen, so dass, wenn Ein Formular in der Ansicht wird mit den Produktdaten gefüllt, diese Daten werden an das Produkt weitergegeben. Weiß jemand, wie man das löst?

Antwort

1

Das Problem ist, dass du bist Syntax ein wenig ausgeschaltet ist. Sie sollten einen der folgenden Werte verwenden:

Dadurch wird eine Eigenschaft mit einem instanziierten Wert Product erstellt.

export class CreateProductComponent { 

    // Define model, declare type, and assign/instantiate. 
    model = new Product(1,'2',1); 

    constructor(private productService: ProductService) { } 
} 

Oder diese, die die Eigenschaft model als eine Art von Product definiert, ihn aber nicht einen Wert zuweisen. Stattdessen wird es im Konstruktor zugewiesen.

export class CreateProductComponent { 

    // Define model, declare type 
    model: Product; 

    constructor(private productService: ProductService) { 
     this.model = new Product(1,'2',1); 
    } 
} 

Alternativ können Sie sogar noch deutlicher sein, auch wenn es nicht erforderlich ist, kann als die Typen leicht zu entnehmen.

export class CreateProductComponent { 

    // Define model, declare type, and assign/instantiate. 
    model: Product = new Product(1,'2',1); 

    constructor(private productService: ProductService) { } 
} 

Es gibt einige große Dokumentation here sowie eine REPL playground, die ich mit sehr empfehlen.

+0

Danke, es funktioniert! Aber sollte ich das Produkt mit diesen bedeutungslosen Werten instanziieren? Wenn ich im Backend programmieren würde, würde ich ein leeres Produkt erstellen (var product = new Product();) und dann würde ich die vom Benutzer gesendeten Werte zuweisen (product.name = name; product.price = price). Wie kann ich das in diesem Fall tun? –

+0

@ JoãoPaiva, kein Problem - glücklich zu helfen. Ich würde persönlich mit der zweiten Option gehen, die ich gepostet habe. 'model: Product', erhalten Sie eine Eigenschaft, die einen definierten Typ hat, und Sie können leicht überprüfen, ob es null ist, indem Sie Standard-JavaScript-Ausdrücke verwenden. –

1

Es sollte

model = new Product(1,'2',1); 
1

Sie erstellen ein Feld in CreateProductComponent. Verwenden Sie ‚=‘ anstelle von ‚:‘ wie

model = new Product(1,'2',1); <- error on this line

1

In Typoskript Terminologie ‚:‘ bedeutet, dass Sie einen Typ für eine Variable deklarieren Sie definiert haben.

'=' bedeutet, dass Sie Ihrer Variablen einen Wert zuweisen.

Aber hier, was Sie getan haben, ist stattdessen einen Wert zuweisen Sie versuchen, einen Wert zu erklären (die nach Syntax nicht korrekt ist)

so können Sie entweder direkt einen Wert wie

model = new Product(1,'2',1); 
zuweisen

oder sonst können Sie zunächst einen Typ für Ihre Variable deklarieren und dann einen Wert in einem dieser beiden Möglichkeiten zuweisen (ich persönlich bevorzuge diese Art und Weise)

model: Product = new Product(1,'2',1); 

oder

model: Product; 
model = new Product(1,'2',1); 
+0

das klärte einige grundlegende Konzepte für mich. Vielen Dank – RenanSS