私は、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
ありがとうございました。
すべての拠点がカバーされていることを確認してください
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の問題を解決したように見えますが、エラーはそのモジュールが見つからないと言っていますインポート行で間違っています。
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を作成します
これはちんぷんかんぷんで間違っています。
私のプロジェクトは現在のCLIツールを使用して作成し、これをインストールしました:
npm install angular-in-memory-web-api --save
わたしにはできる。
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 };
}
}
この問題を解決するには
ng generate service InMemoryData --module=app
ユーザーの提案どおり ser875234
しかし、ここの多くの答えも質問からコピーして貼り付けました
import { InMemoryDataService } from './in-memory-data-service';
それは間違っています。 Heroesチュートリアルに表示されているとおりになります
import { InMemoryDataService } from './in-memory-data.service';
ハイフンではなく「dataDOTservice」に注意してください。初心者にはチュートリアルの間違いのように見えますが、OPの質問やここでのいくつかの答えとは一致しません。ドットは正しく、ハイフンは間違っています。
ヒーローのツアー(Angularチュートリアルサンプル)の後
import { HttpClientInMemoryWebApiModule } from 'angular-in-memory-web-api';
import { InMemoryDataService } from './in-memory-data-service';
次のコマンドを実行する必要があります。
ng generate service InMemoryData
グローバルインストールを実行します。Sudoにアクセス許可の問題がある場合
npm install -g angular-in-memory-web-api
解決するには、この手順を試してください
ng generate service InMemoryData --module=app
を実行し、チュートリアルにリストされているコードを置き換えて保存します。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: [],
...
private heroesUrl = 'api/heroes'; // URL to web api
にhero.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) {
...
ng sever
を実行してアプリを更新し、お楽しみください!.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に変更します。