在Angular2的英雄之旅中找不到模块'./in-memory-data-service'

Jon*_*tel 29 typescript angular2-http angular

我正在尝试通过Angular2浏览英雄应用程序,并在本教程Http部分遇到错误.

起初我得到了错误:

Cannot find module 'angular2-in-memory-web-api'
Run Code Online (Sandbox Code Playgroud)

但修复了使用此问题信息.

但是,在同一步骤中我也遇到以下错误:

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

我已经三次检查了,我相信我的in-memory-data-service.ts文件和我的app.module.ts文件与教程中列出的完全相同(在这个特定的时间点).

现在我的in-memory-data-service.ts文件如下所示:

码:

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};
  }
}
Run Code Online (Sandbox Code Playgroud)

我的app.module.ts文件如下所示:

码:

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 {
}
Run Code Online (Sandbox Code Playgroud)

我不确定这是否是由于package.json或systemjs.config中某种依赖设置不正确,或者是否有一个简单的错误我正在帮助.

编辑

我的systemjs.config.js文件如下所示:

码:

(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);
Run Code Online (Sandbox Code Playgroud)

我的文件结构目前如下所示:

文件结构:

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

index.html
systemjs.config.js
Run Code Online (Sandbox Code Playgroud)

谢谢.

use*_*234 43

ng generate service InMemoryData --module=app
Run Code Online (Sandbox Code Playgroud)

将创建该src/app/in-memory-data.service.ts文件.然后添加教程中列出的代码,它将起作用.AFAIK他们甚至不暗示在教程中所以不要感觉不好.实际上他们说的是

forRoot()配置方法采用InMemoryDataService类来填充内存数据库.

Tour of Heroes示例创建了一个类src/app/in-memory-data.service.ts

这是胡言乱语和错误.

  • 非常感谢.他们完全跳过了那一步. (2认同)
  • 谢谢!这应该标记为正确的答案.您认为该教程现在已经更新了. (2认同)

小智 20

我使用当前的CLI Tools创建了我的项目,我安装了这个:

npm install angular-in-memory-web-api --save
Run Code Online (Sandbox Code Playgroud)

这个对我有用.


Log*_*n H 14

只要确保你的所有基地都被覆盖

package.json中,应该匹配页面上的那个.

"angular-in-memory-web-api": "~0.1.1",
Run Code Online (Sandbox Code Playgroud)

另外,你的systemjs.config文件看起来也不错!

在你的app.module.ts中,确保你的in-memory-data-service导入与你的文件匹配,因为在他们的例子中他们有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
Run Code Online (Sandbox Code Playgroud)

因此,您的文件应命名为in-memory-data-service.ts.我觉得有一个命名错误或某种文件结构问题.

看起来你解决了package.json问题,你得到的错误就是说它找不到那个模块,现在可能是因为你的文件名或文件路径有拼写错误导入行错了.

  • TOH 教程中 Angular 的命名/措辞会产生问题 (2认同)

Pav*_*hov 8

对于Angular5教程和angular-in-memory-web-api@0.5.3:

使用以下内容将新文件"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 };
}
}
Run Code Online (Sandbox Code Playgroud)


Moh*_*deh 8

在英雄之旅(Angular 教程示例)之后

import { HttpClientInMemoryWebApiModule } from 'angular-in-memory-web-api';
import { InMemoryDataService } from './in-memory-data-service';
Run Code Online (Sandbox Code Playgroud)

您必须运行以下命令:

ng generate service InMemoryData
Run Code Online (Sandbox Code Playgroud)