如何在angular2服务调用期间进行过滤

How to filter during angular2 service call

我正在尝试在 Angular 2 上开发模型。在这种情况下,我有一个名为 Layer 的模型,其中有多个 JSON 条目:

Layer.ts

export class Layer {
  model: number;
  layer: string;
  loaded: number;
}

我还有一个用于模型的模拟层注入器:

模拟-layer.ts

import { Layer } from './layer';

export const LAYERS: Layer[] = [
  {model: 9.1, layer: 'SIF', loaded: 1},
  {model: 9.1, layer: 'AW', loaded: 1},
  {model: 9.1, layer: 'DW', loaded: 1},
  {model: 8.7, layer: 'SIF', loaded: 1},
  {model: 8.7, layer: 'AW', loaded: 1},
  {model: 8.7, layer: 'DW', loaded: 1}
];

在现实世界中,我只会 return 1 个型号“9.1”或“8.7”​​。但是,我正处于模型阶段,我现在正在提取我的两个示例。

为了服务这些数据,我有一个图层服务:

layer.service.ts

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

import { LAYERS } from './mock-layers';

@Injectable()
export class LayerService {
  getLayers() {
    return Promise.resolve(LAYERS);
  }

}

函数getLayers() return所有图层记录。 对于我正在制作的示例,我如何 return 仅适合特定变量的层(例如 Model = '9.1')?

您可以在创建 Promise 之前使用 Array#filter():

getLayers() {
  return Promise.resolve(LAYERS.filter(layer => layer.model === 9.1));
}

参见 demo plunker here


更新:根据评论,为什么 === 而不是 =

=是归因,所以:

LAYERS.filter(layer => layer.model = 9.1)

在这种情况下完全错误。它没有过滤任何东西,它(在 plunker 中尝试)基本上覆盖每个 layer.model9.1

另一方面,

=== 严格相等 运算符:

LAYERS.filter(layer => layer.model === 9.1)

上面的代码将生成一个数组,其中的内容是每个 LAYERS 具有 model 属性 严格等于 的元素9.1.

要了解 "strictly" 部分的更多信息,请查看 this link