无法解决rxjs

时间:2018-01-16 11:39:15

标签: angular npm node-modules

编译失败。

  

./ src / app / hero.service.ts找不到模块:错误:无法解决   ' /可观察/的&#39 rxjs; in' C:\ Users \ Admin \ angular \ myheroes \ src \ app'

@ ./src/app/hero.service.ts 13:11-40 
@ ./src/app/app.module.ts 
@ ./src/main.ts 
@ multi webpack-dev-server/client?http://0.0.0.0:0 ./src/main.ts

我的代码为hero.service.ts

import { Injectable } from '@angular/core';
import { Observable } from 'rxjs';
import { of } from 'rxjs/Observable/of';
import { Hero } from './hero';
import { HEROES } from './mock-heroes';
import { MessageService } from './message.service';

@Injectable()
export class HeroService {

   constructor(private messageService: MessageService) { }

  getHeroes(): Observable<Hero[]>

  {
    // todo: send the message _after_fetching the heroes
    this.messageService.add('HeroService: fetched heroes');
    return of (HEROES);
  }
}

12 个答案:

答案 0 :(得分:32)

我收到此错误是因为rxjs的版本较旧,而Angular 6需要最新版本的rxjs。

此命令将安装与Angular 6兼容的最新版本。

npm install --save rxjs-compat

答案 1 :(得分:17)

正如Aravind在他的评论中指出的那样,案件在这里很重要。而不是

UINavigationController

尝试...

    let yourviewController = self.storyboard?.instantiateViewController(withIdentifier: "yourVCIdentifer")

    let nav = UINavigationController(rootViewController: yourviewController)

    self.present(nav, animated: true, completion: nil)

答案 2 :(得分:10)

通常,您的项目中会有一个名为rxjs-operators.ts的文件,用于导入您需要的rxjs部分。您应该将此行添加到该文件中:

import 'rxjs/add/observable/of';

同时取出这一行:

import { of } from 'rxjs/observable/of';

或者,直接将其导入您的模块,看看它是否有效。

答案 3 :(得分:9)

对于截至7月13日仍在世的人,导入模块的正确方法如下:

import { Observable, of } from 'rxjs';

我敢肯定,由于访问大写字母O和小写字母o文件夹的命名约定不正确,因此它们以更全面的方式包含了它。

注意:这是流血的边缘。 ;)

答案 4 :(得分:2)

我有同样的问题,我解决了以下问题......

import { Observable } from 'rxjs/Observable';
import 'rxjs/add/observable/of';

使用地点:

Observable.of(something)

注意:总是在.find看一下很重要,你可以找到当前版本的文档

答案 5 :(得分:1)

import { Injectable } from '@angular/core';

import { Observable } from 'rxjs/Observable';

import { of } from 'rxjs/observable/of';

import { Hero } from './hero';

import { HEROES } from './mock-heroes';

始终确保引用文件的顺序应该是正确的顺序。

答案 6 :(得分:1)

我对angular / core和rxjs都有相同的错误。 这是解决问题的方法,方法是明确告诉编译器在哪里可以找到该库:

mat-cell

答案 7 :(得分:0)

在我的情况下,由于 webpack.config.js 中的rxjs路径,我收到了错误。

我使用 angular-cli 在C盘下创建了项目,并使用ng eject弹出项目并生成 webpack.config.js 。< / p>

实际上 angular-cli 为rxjs注入绝对路径,如下所示:

"alias": {
      "rxjs/observable/of": "C:\\my_project_directory\\node_modules\\rxjs\\_esm5\\observable\\of.js"

...}

手动将其修改为相对路径后

"alias": {
      "rxjs/observable/of": "rxjs\\_esm5\\observable\\of.js"

.. }

它开始工作了。

答案 8 :(得分:0)

关于这个问题的答案是矛盾的,这个问题很好,但是没有真正有用的答案。

这与从6.0版开始的Rxjs API的更改有关

由于RxJ的版本不同,这里的答案令人困惑,这就是问题所在。以“这对我有用”开头或结尾的答案是没有用的,因为这不是答案,这是它可能如何工作的一个示例,但是您从来没有完整的故事,因此它没有用,因为它无法解释任何内容

这一切都很好地解释了: https://academind.com/learn/javascript/rxjs-6-what-changed/ 如果您有12分钟的时间,则此Youtube也对此进行了很好的说明: https://www.youtube.com/watch?v=X9fdpGthrXA

我知道在StackOverflow中不赞赏外部链接,这是有充分的理由的,尽管知道的不是很多,但对于简短而有用的答案,它还是有一定解释的。

因此,简而言之,该问题与版本6.0之前的Rxjs API和RxJs 6.0之后的版本之间的差异有关 如果要保持6.0之前的代码不变,则应安装rxjs-compat,这不是很糟糕

更好的办法是更改代码,并保持最新状态并为将来做好准备。

答案 9 :(得分:0)

Angular 7和RxJS 6 +

import { Observable } from 'rxjs'
import { tap, map, switchMap, catchError } from 'rxjs/operators'

所有运算符现在都位于rxjs/operators中。

答案 10 :(得分:0)

下一步对我有用。

1)导入运算符

import 'rxjs/add/observable/of'; 
import { of } from 'rxjs/observable/of'; 

2)安装 rxjs-compat 软件包

$ npm i --save rxjs-compat

答案 11 :(得分:0)

接下来的步骤对我有用。

NSArray *items = [[UIPasteboard generalPasteboard] itemProviders];
for (NSInteger i = 0; i < itemProvider.count; i++) {
    NSItemProvider *itemProvider = itemProvider[i];
    NSString *identifier = itemProvider.registeredTypeIdentifiers[0];
    [itemProvider loadDataRepresentationForTypeIdentifier:identifier completionHandler:^(NSData * _Nullable data, NSError * _Nullable error) {
        NSMutableDictionary *result;
        if (!error) {
            NSString *ext = (__bridge NSString *)(UTTypeCopyPreferredTagWithClass((__bridge CFStringRef _Nonnull)(identifier), kUTTagClassFilenameExtension));
            if ([ext isEqualToString:@"jpeg"]) {
                ext = @"jpg";
            }
            NSString *mime = (__bridge NSString *)(UTTypeCopyPreferredTagWithClass((__bridge CFStringRef _Nonnull)(identifier), kUTTagClassMIMEType));
            if (!mime) {
                 mime = @"application/*";
            }
    
            NSString *filename = itemProvider.suggestedName;
            NSString *path = [folderPath stringByAppendingPathComponent:filename];
            [data writeToFile:path options:NSDataWritingAtomic error:&error];
        }
    }
}