Angular - карта не является функцией - PullRequest
0 голосов
/ 25 мая 2018

Я пытаюсь заполнить Observable в своем угловом проекте, но он говорит: «... .map - это не функция», поэтому, вы можете объяснить, что не так с моим кодом?

tasks.component.ts (карта также импортирована из rxjs / operator)

ngOnInit() {
    this.tasks = this.tasksService.tasks.map(x => x.filter(y => y.isDone == this.completed));
    this.tasksService.getTasks();
  }

А вот мой сервис, который предоставляет Observable:

task.service.ts

export class TasksService {
  private _tasks = new BehaviorSubject<Task[]>([]);
  tasks = this._tasks.asObservable();
  constructor(private http : Http) {
    console.log('Tasks Service is initialized...');
  }

  getTasks() {
    this.http.get(URL).subscribe(x => {
      this._tasks.next(x.json());
    });
  }

Ответы [ 2 ]

0 голосов
/ 25 мая 2018
Using Observable.subscribe directly should work.like below

@Injectable()
export class HallService {
    public http:Http;
    public static PATH:string = 'app/backend/'    

    constructor(http:Http) {
        this.http=http;
    }

    getHalls() {
    // ########### No map
           return this.http.get(HallService.PATH + 'hall.json');
    }
}


export class HallListComponent implements OnInit {
    public halls:Hall[];
    / *** /
    ngOnInit() {
        this._service.getHalls()
           .subscribe(halls => this.halls = halls.json()); // <<--
    }
}
0 голосов
/ 25 мая 2018

Импорт map, например, если вы используете rxjs версию меньше 6.

import 'rxjs/add/operator/map';

Если вы используете rxjs версия 6 или выше, то сначала вам нужноОператор импорта выглядит так:

import { map } from 'rxjs/operators';

Во-вторых, вы должны использовать pipe перед map:

this.tasks = this.tasksService.tasks.pipe(
                 map(x => x.filter(y => y.isDone == this.completed))
             );
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...