Экземпляр класса Angular TypeScript

import inspect

def foo():
   print(inspect.stack()[0][3])
0
задан user295541 16 January 2019 в 15:54
поделиться

2 ответа

Вы не создаете экземпляр пользователя.
Вот пример того, как это может быть реализовано:

 export class User {

    id?: number;
    userName?: string;
    knownAs?: string;
    age?: number;
    gender?: string;
    created?: Date;
    lastActive?: Date;
    photoUrl?: string;
    city?: string;
    country?: string;
    surname?: string;
    givenname?: string;

    constructor(args: User = {}) {
      this.id = args.id;
      this.userName = args.userName;
      this.knownAs = args.knownAs;
      this.age = args.age;
      this.gender = args.gender;
      this.created = args.created;
      this.lastActive = args.lastActive;
      this.photoUrl = args.photoUrl;
      this.city = args.city;
      this.country = args.country;
      this.surname = args.surname;
      this.givenname = args.givenname;
    }

    get fullName(): string {
        return `${this.givenname} ${this.surname}`;
    }

    sayHello() {
        console.log(`Hello, my name is ${this.surname} ${this.givenname}!`);
      }
}

Используйте map для создания своего пользовательского экземпляра:

user: User;
this.userService.getUser(this.loggedUser.nameid)
  .pipe(map((user: User) => new User(user)))
  .subscribe((user: User) => {
    this.user = user;
    this.user.givenname = this.loggedUser.given_name;
    this.user.surname = this.loggedUser.family_name;
    console.log(this.user.fullName);
    this.user.sayHello();
  });
0
ответ дан Florian 16 January 2019 в 15:54
поделиться

Попробуйте создать объект prototype для User следующим образом. User вы получаете от службы не может быть prototype объект и, следовательно, функции на нем недоступны.

user: User;
this.userService.getUser(this.loggedUser.nameid).subscribe((user: User) => {
    this.user = Object.assign(new User, user) //-->notice the use of new here..
    this.user.givenname = this.loggedUser.given_name;
    this.user.surname = this.loggedUser.family_name;
    console.log(this.user.fullName);
    this.user.sayHello();
  });

Обновление: классы JavaScript не совсем объектно-ориентированная модель. Согласно MDN:

классы JavaScript, представленные в ECMAScript 2015, в основном являются синтаксическим сахаром по сравнению с существующим наследованием JavaScript на основе прототипов. Синтаксис класса не вводит новую объектно-ориентированную модель наследования в JavaScript.

Подробнее здесь

Также, как указано @theMayer в комментарии, сервис, который возвращает user, также может возвращать соответствующий объект User, который имеет прототип функции. Итак, это смещение кода для создания объекта от клиента к сервису. Мне нравится такой подход, просто потому, что это означает, что любой другой потребитель сервиса может использовать поведение (функции) объекта без необходимости дублировать (Object.assign) объект.

Итак, в UserService.ts (или там, где это userService определено), что-то вроде:

getUser(id: string):User {
  //existing logig
  return Object.assign(new User(), user)//--> there are other ways to create object too, this is just one way.
}
0
ответ дан Aragorn 16 January 2019 в 15:54
поделиться
Другие вопросы по тегам:

Похожие вопросы: