How do I declare a model class in my Angular 2 component using TypeScript?

后端 未结 8 690
野趣味
野趣味 2020-12-23 11:10

I am new to Angular 2 and TypeScript and I\'m trying to follow best practices.

Instead of using a simple JavaScript model ({ }), I\'m attempting to create a TypeScri

相关标签:
8条回答
  • 2020-12-23 11:25

    my code is

        import { Component } from '@angular/core';
    
    class model {
      username : string;
      password : string;
    }
    
    @Component({
      selector: 'app-root',
      templateUrl: './app.component.html',
      styleUrls: ['./app.component.css']
    })
    
    
    
    export class AppComponent {
    
     username : string;
     password : string;
      usermodel = new model();
    
      login(){
      if(this.usermodel.username == "admin"){
        alert("hi");
      }else{
        alert("bye");
        this.usermodel.username = "";
      }    
      }
    }
    

    and the html goes like this :

    <div class="login">
      Usernmae : <input type="text" [(ngModel)]="usermodel.username"/>
      Password : <input type="text" [(ngModel)]="usermodel.password"/>
      <input type="button" value="Click Me" (click)="login()" />
    </div>
    
    0 讨论(0)
  • 2020-12-23 11:28

    I'd try this:

    Split your Model into a separate file called model.ts:

    export class Model {
        param1: string;
    }
    

    Import it into your component. This will give you the added benefit of being able to use it in other components:

    Import { Model } from './model';
    

    Initialize in the component:

    export class testWidget {
       public model: Model;
       constructor(){
           this.model = new Model();
           this.model.param1 = "your string value here";
       }
    }
    

    Access it appropriately in the html:

    @Component({
          selector: "testWidget",
          template: "<div>This is a test and {{model.param1}} is my param.</div>"
    })
    

    I want to add to the answer a comment made by @PatMigliaccio because it's important to adapt to the latest tools and technologies:

    If you are using angular-cli you can call ng g class model and it will generate it for you. model being replaced with whatever naming you desire.

    0 讨论(0)
  • 2020-12-23 11:31
    export class Car {
      id: number;
      make: string;
      model: string;
      color: string;
      year: Date;
    
      constructor(car) {
          {
            this.id = car.id;
            this.make = car.make || '';
            this.model = car.model || '';
            this.color = car.color || '';
            this.year = new Date(car.year).getYear();
          }
      }
    }
    

    The || can become super useful for very complex data objects to default data that doesn't exist.

    . .

    In your component.ts or service.ts file you can deserialize response data into the model:

    // Import the car model
    import { Car } from './car.model.ts';
    
    // If single object
    car = new Car(someObject);
    
    // If array of cars
    cars = someDataToDeserialize.map(c => new Car(c));
    
    0 讨论(0)
  • 2020-12-23 11:32

    In your case you are having model on same page, but you have it declared after your Component class, so that's you need to use forwardRef to refer to Class. Don't prefer to do this, always have model object in separate file.

    export class testWidget {
        constructor(@Inject(forwardRef(() => Model)) private service: Model) {}
    }
    

    Additionally you have to change you view interpolation to refer to correct object

    {{model?.param1}}
    

    Better thing you should do is, you can have your Model Class define in different file & then import it as an when you require it by doing. Also have export before you class name, so that you can import it.

    import { Model } from './model';
    
    0 讨论(0)
  • 2020-12-23 11:41

    You can use the angular-cli as the comments in @brendon's answer suggest.

    You might also want to try:

    ng g class modelsDirectoy/modelName --type=model
    
    /* will create
     src/app/modelsDirectoy
     ├── modelName.model.ts
     ├── ...
     ...
    */
    

    Bear in mind: ng g class !== ng g c
    However, you can use ng g cl as shortcut depending on your angular-cli version.

    0 讨论(0)
  • 2020-12-23 11:43

    create model.ts in your component directory as below

    export module DataModel {
           export interface DataObjectName {
             propertyName: type;
            }
           export interface DataObjectAnother {
             propertyName: type;
            }
        }
    

    then in your component import above as, import {DataModel} from './model';

    export class YourComponent {
       public DataObject: DataModel.DataObjectName;
    }
    

    your DataObject should have all the properties from DataObjectName.

    0 讨论(0)
提交回复
热议问题