Angular 6: модуль не найден, ошибка в отношении RxJs

я использую

  • Угловой интерфейс командной строки: 6.0.5
  • Узел: 8.11.1
  • Угловой: 6.0.3
  • rxjs: 6.2.0

при компиляции приложения Angular 6 у меня возникли ошибки, ниже только первая.

ERROR in ./src/app/web.service.ts
Module not found: Error: Can't resolve 'rxjs/add/operator/toPromise' in 
'C:\Node\ang\frontend\src\app'

Мой код web.service.ts

import { Http, Headers, Response } from '@angular/http';
import 'rxjs/add/operator/toPromise';

export class WebService{
    constructor(private http:Http){

    }
    getMessages(){
        return this.http.get("http://localhost:2000/messages").toPromise(); 
    }
} 

Мой код app.module.ts

import { BrowserModule } from '@angular/platform-browser';
import { NgModule } from '@angular/core';
import {NoopAnimationsModule} from '@angular/platform-browser/animations';
import {MatButtonModule,
  MatCardModule,
  MatSnackBarModule,
  MatToolbarModule,
  MatInputModule} from '@angular/material';

import { AppComponent } from './app.component';
import { WebService } from './web.service';
import { MessagesComponent } from './messages.component';
import {HttpModule} from '@angular/http';

@NgModule({
  declarations: [
    AppComponent,  MessagesComponent
  ],
  imports: [
    BrowserModule, HttpModule, NoopAnimationsModule, MatButtonModule, MatCardModule, MatSnackBarModule, MatToolbarModule, MatInputModule
  ],
  providers: [WebService],
  bootstrap: [AppComponent]
})
export class AppModule { }

Я изучаю Angular из видеоурока Lynda.com. Я слежу за каждым шагом. но я получил ошибку.

Отметьте мой ответ, если это помогло, у вас нет хорошей истории отмечать ответы;)

Vikas 27.05.2018 16:21

Вам следует установить библиотеку rxjs-compat, а также для других операторов, которые могут потребоваться при переходе на rxjs6 +.

Nicholas Pesa 27.05.2018 23:07
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
9
2
18 462
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Ответ принят как подходящий

Вы используете HttpModule, который является устарел, вы должны использовать HttpClientModule вместо

рекомендуется использовать Observables over promises. При преобразовании в обещание вы потеряете возможность отмены запроса и возможность связывать операторы RxJS. Прежде чем вы сможете использовать HttpClient, вам необходимо импортировать Angular HttpClientModule в корневой модуль.

    import { NgModule }         from '@angular/core';
    import { BrowserModule }    from '@angular/platform-browser';
    import { HttpClientModule } from '@angular/common/http';

    @NgModule({
      imports: [
        BrowserModule,
        HttpClientModule,
      ],
//.......

Измененный код:

import { HttpClient} from '@angular/http';
import {Observable} from 'rxjs';    

    export class WebService{
        constructor(private httpc:Http){}
        getMessages():Observable<any>{
            return this.httpc.get("http://localhost:2000/messages"); 
        }
    } 

Regarding the error you are getting

Начиная с rxjs 5.5.0-beta.5 +, метод toPromise теперь является постоянным методом Observable. Больше не нужно импортировать его Reference

Поскольку вы работаете с RXJS 6+, я бы посоветовал вам пройти Changes

LIVE DEMO WITH HTTPCLIENT

Строка комментария: import 'rxjs / add / operator / toPromise';

смешно, но это правильный ответ ... Решил мой случай. Это просто потому, что toPromise является законным членом, сейчас импорт не требуется ... хотя описание в ответе может быть более подробным ...

Dmitry Gusarov 25.08.2018 22:08

Разве .toPromise() раньше не был легитимным членом ... а потом не одним ... а теперь снова? ... Но до всего этого не одним - а до что легитимным? Я чувствую, что каждый выпуск этого репо меняет это.

Cody 05.10.2018 01:28

После Angular 6 вам нужно будет установить пакет rxjs-compat

npm install --save rxjs-compat

подробнее смотрите https://academind.com/learn/javascript/rxjs-6-what-changed/

Другие вопросы по теме