web-dev-qa-db-ja.com

Angular2のヒーローのツアーでモジュール './in-memory-data-service'が見つかりません

私は、Angular2のヒーローアプリのツアーを進めようとしていますが、 チュートリアルのHTTPセクション のバグに直面しています。

最初はエラーが発生していました:

Cannot find module 'angular2-in-memory-web-api'

しかし、 この質問からの情報 を使用して修正しました。

ただし、この同じステップで次のエラーも表示されます。

app/app.module.ts(10,38): error TS2307: Cannot find module './in-memory-data-service'.

トリプルチェックを行ったところ、in-memory-data-service.tsファイルとapp.module.tsファイルの両方が、この特定の時点でチュートリアルに記載されているものとまったく同じであると思います。

現在、私のin-memory-data-service.tsファイルは次のようになっています。

CODE:

import { InMemoryDbService } from 'angular2-in-memory-web-api';
export class InMemoryDataService implements InMemoryDbService {
createDb() {
let heroes = [
  {id: 11, name: 'Mr. Nice'},
  {id: 12, name: 'Narco'},
  {id: 13, name: 'Bombasto'},
  {id: 14, name: 'Celeritas'},
  {id: 15, name: 'Magneta'},
  {id: 16, name: 'RubberMan'},
  {id: 17, name: 'Dynama'},
  {id: 18, name: 'Dr IQ'},
  {id: 19, name: 'Magma'},
  {id: 20, name: 'Tornado'}
];
return {heroes};
  }
}

私のapp.module.tsファイルは次のようになります。

CODE:

import './rxjs-extensions';

import { NgModule }             from '@angular/core';
import { BrowserModule }        from '@angular/platform-browser';
import { FormsModule }          from '@angular/forms';
import { HttpModule }           from '@angular/http';

//Imports for loading & configuring the in-memory web API
import { InMemoryWebApiModule } from 'angular2-in-memory-web-api';
import { InMemoryDataService }  from './in-memory-data-service';

import { AppComponent }         from './app.component';
import { DashboardComponent }   from './dashboard.component';
import { HeroesComponent }      from './heroes.component';
import { HeroDetailComponent }  from './hero-detail.component';
import { HeroService }          from './hero.service';
import { routing }              from './app.routing';

@NgModule({
  imports:        [
                    BrowserModule,
                    FormsModule,
                    HttpModule,
                    InMemoryWebApiModule.forRoot(InMemoryDataService),
                    routing
                  ],
  declarations:   [
                    AppComponent,
                    DashboardComponent,
                    HeroDetailComponent,
                    HeroesComponent
                  ],
  providers:      [
                    HeroService
                  ],
bootstrap:        [ AppComponent ]
})

export class AppModule {
}

これが適切に設定されていないpackage.jsonまたはsystemjs.configのある種の依存関係によるものなのか、私が助けている単純な間違いがあるのか​​はわかりません。

[〜#〜] edit [〜#〜]

私のsystemjs.config.jsファイルは次のようになります。

CODE:

(function (global) {
System.config({
paths: {
  // paths serve as alias
  'npm:': 'node_modules/'
},
// map tells the System loader where to look for things
map: {
  // our app is within the app folder
  app: 'app',
  // angular bundles
  '@angular/core': 'npm:@angular/core/bundles/core.umd.js',
  '@angular/common': 'npm:@angular/common/bundles/common.umd.js',
  '@angular/compiler': 'npm:@angular/compiler/bundles/compiler.umd.js',
  '@angular/platform-browser': 'npm:@angular/platform-browser/bundles/platform-browser.umd.js',
  '@angular/platform-browser-dynamic': 'npm:@angular/platform-browser-dynamic/bundles/platform-browser-dynamic.umd.js',
  '@angular/http': 'npm:@angular/http/bundles/http.umd.js',
  '@angular/router': 'npm:@angular/router/bundles/router.umd.js',
  '@angular/forms': 'npm:@angular/forms/bundles/forms.umd.js',
  // other libraries
  'rxjs':                       'npm:rxjs',
  'angular2-in-memory-web-api': 'npm:angular2-in-memory-web-api',
},
// packages tells the System loader how to load when no filename and/or no extension
packages: {
  app: {
    main: './main.js',
    defaultExtension: 'js'
  },
  rxjs: {
    defaultExtension: 'js'
  },
  'angular2-in-memory-web-api': {
    main: 'index.js',
    defaultExtension: 'js'
  }
}
});
})(this);

現在、私のファイル構造は次のようになっています。

ファイル構造:

app/app.module.ts
app/in-memory-data-service.ts

index.html
systemjs.config.js

ありがとうございました。

27

すべての拠点がカバーされていることを確認してください

package.jsonで、 this ページにあるものと一致する必要があります。

"angular-in-memory-web-api": "~0.1.1",

また、systemjs.configファイルも良さそうです!

app.module.tsで、in-memory-data-service importはあなたのファイルと一致します。なぜなら彼らの例ではin-memory-data.service

// Imports for loading & configuring the in-memory web api
import { InMemoryWebApiModule } from 'angular-in-memory-web-api';
import { InMemoryDataService }  from './in-memory-data-service'; // <-- Make sure this matches the file name

したがって、ファイルの名前はin-memory-data-service.tsにする必要があります。命名ミスや何らかのファイル構造の問題があるように思えます。

Package.jsonの問題を解決したように見えますが、エラーはそのモジュールが見つからないと言っていますインポート行で間違っています。

14
Logan H
ng generate service InMemoryData --module=app

src/app/in-memory-data.service.tsファイルを作成します。次に、チュートリアルにリストされているコードを追加すると、動作します。知る限りでは、チュートリアルでそれを暗示しているわけでもないので、気分を悪くしないでください。実際、彼らの言うことは

ForRoot()構成メソッドは、メモリ内データベースを準備するInMemoryDataServiceクラスを取ります。

Tour of Heroesサンプルは、このようなクラスsrc/app/in-memory-data.service.tsを作成します

これはちんぷんかんぷんで間違っています。

42
user875234

私のプロジェクトは現在のCLIツールを使用して作成し、これをインストールしました:

npm install angular-in-memory-web-api --save

わたしにはできる。

20
huso

Angular5チュートリアルおよび[email protected]の場合:

次の内容の新しいファイル「in-memory-data.service.ts」をルートディレクトリに追加します。

import { InMemoryDbService } from 'angular-in-memory-web-api';

export class InMemoryDataService  implements InMemoryDbService {
createDb() {
    let heroes = [
        { id: 1, name: 'Windstorm' },
        { id: 2, name: 'Bombasto' },
        { id: 3, name: 'Magneta' },
        { id: 4, name: 'Tornado' }
    ];
    return { heroes };
}
}
8
Pavlo Lyakhov

この問題を解決するには

ng generate service InMemoryData --module=app  

ユーザーの提案どおり ser875234

しかし、ここの多くの答えも質問からコピーして貼り付けました

import { InMemoryDataService } from './in-memory-data-service';  

それは間違っています。 Heroesチュートリアルに表示されているとおりになります

import { InMemoryDataService } from './in-memory-data.service';  

ハイフンではなく「dataDOTservice」に注意してください。初心者にはチュートリアルの間違いのように見えますが、OPの質問やここでのいくつかの答えとは一致しません。ドットは正しく、ハイフンは間違っています。

2
Rin and Len

ヒーローのツアー(Angularチュートリアルサンプル)の後

import { HttpClientInMemoryWebApiModule } from 'angular-in-memory-web-api';
import { InMemoryDataService } from './in-memory-data-service';

次のコマンドを実行する必要があります。

ng generate service InMemoryData
1

グローバルインストールを実行します。Sudoにアクセス許可の問題がある場合

npm install -g angular-in-memory-web-api
0
JuricaJaman

解決するには、この手順を試してください

  1. angular cli)でng generate service InMemoryData --module=appを実行し、チュートリアルにリストされているコードを置き換えて保存します。
  2. app.module.tsに移動し、その中にコードを追加します。そのため、このようなコードです。

app.module.ts

import { HttpClientModule }    from '@angular/common/http';
import { HttpClientInMemoryWebApiModule } from 'angular-in-memory-web-api';
import { InMemoryDataService }  from './in-memory-data.service';

@NgModule({
declarations: [
   ...
],
imports: [
   ...
   HttpClientModule,
   // The HttpClientInMemoryWebApiModule module intercepts HTTP requests
   // and returns simulated server responses.
   // Remove it when a real server is ready to receive requests.
   HttpClientInMemoryWebApiModule.forRoot(
      InMemoryDataService, { dataEncapsulation: false }
   )
],
providers: [],
   ...
  1. private heroesUrl = 'api/heroes'; // URL to web apihero.service.tsを追加することを忘れないでください

hero.service.ts

   ...
export class HeroService {

   constructor(
      private http: HttpClient,
      private messageService: MessageService,
   ) { }

   private heroesUrl = 'api/heroes';  // URL to web api

   /** GET heroes from the server */
   getHeroes (): Observable<Hero[]> {
      return this.http.get<Hero[]>(this.heroesUrl)
   }


   getHero(id: number): Observable<Hero> {
   ...

   /** Log a HeroService message with the MessageService */
   private log(message: string) {
   ...
  1. ng severを実行してアプリを更新し、お楽しみください!.
0
Latief Anwar

Angular 6-私が手に入れたウィンドウ

Failed to compile.

./src/app/in-memory-data.service
Module build failed: Error: ENOENT: no such file or directory, open 'e:\visualStudioWorkspace\angular-tour-of-heroes\src\app\in-memory-data.service'

私が変わるとき

import { InMemoryDataService }  from './in-memory-data.service';

to(data.serviceがdata-serviceに変更されることに注意してください)

import { InMemoryDataService }  from './in-memory-data-service';

そして、ファイル名をin-memory-data-service.tsに変更します。

0
Levijatanu