如何链接Angular5中的类/对象?

时间:2018-01-16 16:28:29

标签: angular class typescript angular5

想象一下带有卡片和类别的闪存卡学习盒。具有标题的类别,具有内容的卡片,链接的类别(仅一个)并且链接到另一张卡片。

如果不使用Angular 5和Typescript中的服务,我应该将它们链接起来? 通过链接,我的意思是,班级如何通过自己找到,与谁联系?

/* card.ts */
export class Card {
  public id: String;
  public content: String;
  public link: Card;
  public category: Category;

  constructor(
    content, category
  ) {
    this.content = content;
    this.category = category;
    this.generateId();
  }

  private generateId(): void {
    this.id = /* generate unique id */;
  }

  public setLink(card) {
    this.link = card;
  }
}

/* category.ts */
import { Card } from './card';    

export class Category {
  public title: String;
  public slug: String;

  constructor (
    title
  ) {
    this.title = title;
    this.generateSlug();
    this.generateId();
  }

  private generateId(): void {
    this.id = /* generate unique id */;
  }

  public getCards: Card[] {
    /* HERE I DO NEED HELP */
    /* to magic, and find all corresponding cards to that category */
  }
}

我在代码(HERE I DO NEED HELP)内部进行了标记,其中类别应该知道哪些卡对应于该类别。稍后,我只想写Category.getCards()来查找所选类别中的所有卡片。

最近我试图编写服务提供商来遍历所有卡并找到合适的卡,但我不能将这些服务注入我的班级以利用它的优势。

PS:我习惯用PHP编写代码,在Laravel中你可以轻松连接n到n,1到n或n对1连接的类。

1 个答案:

答案 0 :(得分:1)

首先,你需要决定你的类别如何知道卡片。实际上,您只需遍历卡片阵列并过滤掉属于特定类别的项目。

这看起来会做什么工作

public getCards(): Card[] {
  return cards.filter(card => card.category === this);
}

因此,唯一的问题是您的类别如何了解cards数组。将其作为参数传递给getCards()或传递给类别的构造函数,或者如果它是全局变量,只需将其导入即可。由您来决定如何继续。