【问题标题】:Angular - map is not a functionAngular - 地图不是函数
【发布时间】:2018-11-04 20:31:57
【问题描述】:

我正在尝试在我的 Angular 项目中归档一个 Observable,但它说:“... .map 不是一个函数”所以,你能解释一下我的代码有什么问题吗?

tasks.component.ts (地图也从 rxjs/operators 导入)

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());
    });
  }

【问题讨论】:

  • 你使用的是哪个版本的 rxjs/angular
  • RXJS 的版本是多少?
  • 5.5.10 是我的 rxjs 的版本。我刚刚检查过了。
  • 你为什么使用HttpModule它已被弃用,你应该使用HttpClientModule
  • @Vikas OP 在哪里提到使用HttpModule?你只是假设我猜...

标签: angular typescript rxjs


【解决方案1】:

如果您使用的rxjs版本低于6,请像这样导入map

import 'rxjs/add/operator/map';

如果您使用的是rxjs 6 或更高版本,那么首先您必须像这样导入运算符:

import { map } from 'rxjs/operators';

其次,你必须在map之前使用pipe

this.tasks = this.tasksService.tasks.pipe(
                 map(x => x.filter(y => y.isDone == this.completed))
             );

【讨论】:

  • 我现在正在使用import { map } from 'rxjs/operators';。那不一样?
  • ^ 这是版本 6+ 的导入方式
  • 它与import { map } from 'rxjs/operators'; 在我的 rxjs 版本 5.5.10 中运行良好......顺便说一句,问题是我没有在管道函数内调用 map。非常感谢! ;)
【解决方案2】:
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()); // <<--
    }
}

【讨论】:

    【解决方案3】:

    我在使用 somearray.map(...) 时也遇到了问题,结果是 somearray 为空,因为它没有从后端正确导入。

    【讨论】:

      猜你喜欢
      • 2023-03-20
      • 2019-12-28
      • 1970-01-01
      • 2023-02-17
      • 2020-01-10
      • 2015-09-01
      • 2018-03-19
      • 2018-07-05
      相关资源
      最近更新 更多