невозможно подписаться на наблюдаемое в angular

#angular #rxjs

#angular #rxjs

Вопрос:

Я новичок в rxjs. Я прочитал документ angular и попробовал базовую концепцию rxjs в файле ts. К сожалению, это выдает мне ошибку. Мой код выглядит следующим образом :

 import { Component } from '@angular/core';
import { of, pipe } from 'rxjs';
import { filter, map } from 'rxjs/operators';

@Component({
  selector: 'app-root',
  templateUrl: './app.component.html',
  styleUrls: ['./app.component.css']
})
export class AppComponent {
  title = 'Rxtest';
  squareOdd = of(1, 2, 3, 4, 5)
  .pipe(
    filter(n => n % 2 !== 0),
    map(n => n * n)
  );
  squareOdd.subscribe(x => console.log(x));

}

  

Ошибка, с которой я сталкиваюсь после компиляции, выглядит следующим образом :
ОШИБКА в src/ app/app.component.ts (17,3): ошибка TS2300: дублирующий идентификатор ‘squareOdd’.
src/app/app.component.ts(17,3): ошибка TS2717: последующие объявления свойств должны иметь тот же тип. Свойство ‘squareOdd’ должно иметь тип ‘Observable’, но здесь имеет тип ‘any’.
src/app/app.component.ts(17,40): ошибка TS2304: не удается найти имя ‘x’.

Комментарии:

1. попробуйте переместить subscribe в contsructor или в ngOnInit() {…}

Ответ №1:

Переместите свою логику в метод, такой как ngOnInit, метод конструктора или любой пользовательский метод, основанный на ваших требованиях. Добавьте логику в любой из методов прототипа класса или в метод конструктора. Например, в вашем случае :

 import { Component } from '@angular/core';
import { of, pipe } from 'rxjs';
import { filter, map } from 'rxjs/operators';

@Component({
  selector: 'app-root',
  templateUrl: './app.component.html',
  styleUrls: ['./app.component.css']
})
export class AppComponent {
  title = 'Rxtest';
  squareOdd = of(1, 2, 3, 4, 5)
  .pipe(
    filter(n => n % 2 !== 0),
    map(n => n * n)
  );

  ngOnInit() {
    this.squareOdd.subscribe(x => console.log(x));
  }

}
  

Здесь определяется элемент экземпляра, squareOdd и подписка создается при инициализации.

Читайте о ngOnInit здесь

Чтобы узнать больше о классах Javascript, прочитайте здесь

Комментарии:

1. Спасибо, это сработало. Размышления о rxjs заставили меня забыть о выполнении оператора.