2017-07-27 5 views
3

私は角2を学習していて、サンドボックスプロジェクトで遊んでいて、Javaや他のOOP言語のような別のクラスでクラスを使用する方法が不思議でした。角2 - Typescript基本的なテストデータベースクラス

私はそうのようなクラス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のプロバイダがありません」というエラーが表示されますが、プロバイダとしてRに追加した場合estaurantsComponent別のエラー「Array()のプロバイダがありません」というエラーが表示されるので、ここで何か間違っていると思います。

私は、ウェブ開発全体にまったく新しいものですから、角度2でこれを設計するはずの基本的な誤解があるかもしれないと思います。

私はオンラインで良いリソースを見つけるのに困っていたので、正しい方向への助けや指導をいただければ幸いです。あなたのお時間をありがとうございました。

+1

あなたのケースでインターフェイスモデルが動作するか、フルクラスを実装しようとしていますか?インターフェイスの例: 'export interface Restaurant {Location:string;名前:文字列。 } ' – jhhoff02

+0

@ jhhoff02 OOP言語のようなクラスを実装しようとするのは可能でしょうか? – Biggytiny

答えて

0

だから私はそれをしばらく再生した後に問題を解決しました。コンストラクタにプライベートフィールドを持つことは、それが注入されていることを意味するので、クラス内の通常のインスタンス変数として宣言する必要があります。これは、同様の問題で不思議に思っている人にとっては、今のところすべてが見える方法です。

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クラスはまだ同じです。