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

时间:2016-07-28 15:43:33

标签: javascript angular angular2-services

我正在尝试在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}
];

在现实世界中,我只返回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()返回所有图层记录。 对于我正在制作的示例,如何仅返回适合某个变量的图层(例如Model = '9.1')?

1 个答案:

答案 0 :(得分: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

更严格地了解""部分,检查this link