Angular 2:从类创建对象

时间:2016-12-14 16:38:14

标签: class angular typescript

您好我想知道是否可以创建一个实现接口的类,然后从那里发送数据来自.get服务来创建一个新对象。像这样的东西

import { Component, OnInit } from '@angular/core';
import { User} from '../interfaces/user';
import {UserService} from '../services/user.service';
import { UserClass } from  '../classes/user-class'

@Component({
  selector: 'up-pros',
  templateUrl: './pros.component.html',
  providers: [UserService]
})
export class ProsComponent implements OnInit {
  public users :User[];
  public term: string;
  constructor(private _httpService: UserService) { }

  ngOnInit() {
    console.log(UserClass)
    this.term= 'INSTRUCTOR';
    this._httpService.searchUsers(this.term)
        .subscribe(
          data => {this.users = new UserClass(data), console.log(data)},
          error => alert(error + ' Error Get')
        );
  }
}

我的UserClass代码就像下一个

import { User } from '../interfaces/user';
import { Address } from "../interfaces/address";

export class UserClass implements User {

public  id:           number
public  name:         string
public  password:     string
public  lastNameA:    string
public  lastNameB:    string
public  photo:        string
public  telephone:    string
public  email:        string
public  userType:     string
public  active:       string
public  score:        number
public  createdAt:    string
public  updatedAt:    string
public  Address:      Address

constructor ( id:           number,
              password:     string,
              name:         string,
              lastNameA:    string,
              lastNameB:    string,
              photo:        string,
              telephone:    string,
              email:        string,
              userType:     string,
              active:       string,
              score:        number,
              createdAt:    string,
              updatedAt:    string,
              Address:      Address)  {
                this.name       = name
                this.password   = password
                this.lastNameA  = lastNameA
                this.lastNameB  = lastNameB
                this.photo      = photo
                this.telephone  = telephone
                this.email      = email
                this.userType   = userType
                this.active     = active
                this.score      = score
                this.createdAt  = createdAt
                this.updatedAt  = updatedAt
                this.Address    = Address
              }

}

以及最后一个界面:

import { Address } from "./address"

export interface User {
  name:       string;
  password:   string;
  lastNameA:  string;
  lastNameB:  string;
  photo:      string;
  telephone:  string;
  email:      string;
  userType:   string;
  active:     string;
  score:      number;
  createdAt:  string;
  updatedAt:  string;
  Address:    Address;
}

这可能吗?因为如果我尝试这样做,我会在pros-component.ts中得到下一个错误:

Supplied parameters do not match any signature of call target.
[default] Checking finished with 1 errors

我的服务:

import {Injectable} from '@angular/core';
import {Http, Headers} from '@angular/http';
import 'rxjs/add/operator/map';
import { User } from '../interfaces/user';


@Injectable()
export class UserService {
  url= 'http://localhostapi/users';

  constructor(private _http: Http){}


  getUsers(){
    return this._http.get(this.url)
      .map(res => res.json());
  }

  searchUsers(term : string ){
    return this._http.get('http://localhostapi/listas?user='+term)
      .map(res => res.json());

  }
  searchUser(term : string ){
    return this._http.get('http://localhostapi/users/'+term)
      .map(res => res.json());

  }

  postUsers(user: User){

    var headers = new Headers ();
    headers.append('Content-Type','application/json');
    return this._http.post(this.url, user, {headers: headers})
    .map(res => res.json());
  }

  updateUsers(user: User, term: string){

    var headers = new Headers ();
    headers.append('Content-Type','application/json');
    return this._http.put(this.url+"/"+term, user, {headers: headers})
    .map(res => res.json());
  }
}

1 个答案:

答案 0 :(得分:2)

如果data的结构与UserClass的列表匹配,您只需执行

this._httpService.searchUsers(this.term)
        .subscribe(
          data => {
                      this.users = data as User[];
                      console.log(data)
                  },
          error => alert(error + ' Error Get')
        );