Angular 2-Typescript Basic Test-Класс Базы Данных
Я изучаю Angular 2 и играю с проектом песочницы, и мне было интересно, как использовать класс в другом классе, похожем на то, что вы сделали бы в Java или других языках ООП.
Если у меня есть класс MockDatabase, например:
export class MockDatabase {
constructor(private list: Restaurant[]){
this.list.push({ id: 1, name: "Chinese", tags: ["Chinese"] });
this.list.push({ id: 2, name: "Mexican", tags: ["Mexican"] });
this.list.push({ id: 3, name: "Italian", tags: ["Italian"] });
this.list.push({ id: 4, name: "American", tags: ["American"] });
}
getList(): Restaurant[] {
return this.list;
}
}
И я хочу использовать этот класс в классе обслуживания так:
@Injectable()
export class RestaurantsService {
constructor(private db: MockDatabase){
}
getAllRestaurants(): Restaurant[] {
return this.db.getList();
}
}
Который затем используется в этом компоненте:
@Component({
selector: 'restaurants',
templateUrl: 'restaurants.html',
providers: [RestaurantsService, PreferencesFilterService]
})
export class RestaurantsComponent implements OnInit{
restaurants: Restaurant[];
constructor(
private restaurantsService: RestaurantsService,
private preferencesFilterService: PreferencesFilterService
) {}
ngOnInit(): void {
this.restaurants = this.restaurantsService.getAllRestaurants();
}
filterRestaurants(): void {
this.restaurants = this.preferencesFilterService.getFilteredRestaurants();
}
Я получаю сообщение об ошибке "нет поставщика для MockDatabase", но затем, если я добавлю его в качестве поставщика к RestaurantsComponent я получаю еще одну ошибку, говоря " нет поставщика для Array ()", поэтому я думаю, что делаю что-то неправильно здесь.
Я полагаю, что у меня может быть фундаментальное непонимание того, как вы должны проектировать подобные вещи в Angular 2, поскольку я совершенно новичок в веб-разработке в целом. Любая помощь или указания в правильном направлении были бы очень признательны, так как у меня возникли проблемы с поиском хорошего ресурса в интернете. Большое спасибо, что уделили мне время.1 ответ:
Таким образом, я решил проблему, поиграв с ней некоторое время. Я понял, что наличие закрытого поля в конструкторе подразумевает, что оно вводится, поэтому я должен объявить его как обычную переменную экземпляра в классе. Вот как все выглядит сейчас для тех, кто интересуется подобной проблемой.
export class MockDatabase { private list: Restaurant[] constructor(){ this.list = new Array(); this.list.push({ id: 1, name: "Chinese", tags: ["Chinese"] }); this.list.push({ id: 2, name: "Mexican", tags: ["Mexican"] }); this.list.push({ id: 3, name: "Italian", tags: ["Italian"] }); this.list.push({ id: 4, name: "American", tags: ["American"] }); } getList(): Restaurant[] { return this.list; } }
И
@Injectable() export class RestaurantsService { private db: MockDatabase; constructor(){ this.db = new MockDatabase(); } getAllRestaurants(): Restaurant[] { return this.db.getList(); } }
Класс RestaurantsComponent все тот же.