想象一下带有卡片和类别的闪存卡学习盒。具有标题的类别,具有内容的卡片,链接的类别(仅一个)并且链接到另一张卡片。
如果不使用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连接的类。
答案 0 :(得分:1)
首先,你需要决定你的类别如何知道卡片。实际上,您只需遍历卡片阵列并过滤掉属于特定类别的项目。
这看起来会做什么工作
public getCards(): Card[] {
return cards.filter(card => card.category === this);
}
因此,唯一的问题是您的类别如何了解cards
数组。将其作为参数传递给getCards()
或传递给类别的构造函数,或者如果它是全局变量,只需将其导入即可。由您来决定如何继续。