2016-03-15 49 views
0

我正在研究一个应用程序,以显示不同环境下我们所有应用程序的内部版本号。Angular 2 Pipe没有将数据返回到模板

我不得不为了从我的数据模型中提取的版本号编写自定义管道。

下面是数据模型的一个非常简化版本:

[ 
    { 
     "Name":"BP", 
     "Environments":[ 
     { 
      "Name":"DEV", 
      "URL":"redacted", 
      "Build":"20160315.1\r\n" 
     }, 
     { 
      "Name":"QA", 
      "URL":"redacted", 
      "Build":"20160311.3\r\n" 
     } 
     ] 
    } 
] 

这里是我计划如何渲染数据以及使用管道:

<tr *ngFor="#app of apps"> 
    <td>{{app.Name}}</td> 
    <td>{{app.Environments | build:"DEV"}}</td> 
    <td>{{app.Environments | build:"QA"}}</td> 
    <td>{{app.Environments | build:"UAT"}}</td> 
    <td>{{app.Environments | build:"PROD"}}</td> 
</tr> 

正如你所看到的我发送Environments阵列为每个应用到管道,以及作为参数的字符串environmentName

我管看起来是这样的:

export class BuildPipe implements PipeTransform { 
    transform(value: Array<Environment>, args: string[]) : any { 
     jQuery.grep(value, (b) => { 
      if (b.Name===args[0]) { 
       return b.Build; 
      } 

     }) 
    } 
} 

它似乎将被完美的工作。它返回b.Build当环境的名称参数匹配,但它不显示在我的模板。我错过了什么?

+0

已检查管道获得实际叫什么名字? –

+0

它的确如此。我上了回线断点权利,它返回 –

+0

和你添加管道的参考? – micronyks

回答

1

有一个return失踪前jQuery

export class BuildPipe implements PipeTransform { 
    transform(value: Array<Environment>, args: string[]) : any { 
     return jQuery.grep(value, (b) => { 
      if (b.Name===args[0]) { 
       return b.Build; 
      } 

     }) 
    } 
} 

return b.Build;只是返回回调传递给jQuery.grep(...)但不能从transform

export class BuildPipe implements PipeTransform { 
    transform(value: Array<Environment>, args: string[]) : any { 
     var filtered = value.filter((val) { 
      return val.Name===args[0] 
     }); 
     if(filtered.length) { 
      return filtered[0] 
     } 
    } 
} 
+0

哦,你是对的!但这带来了另一个问题。这似乎是返回grep找到的整个环境对象。我如何才能返回内部版本号? –

+0

对不起,我不知道'jQuery()'。 –

+0

嗯,我完全正确的删除jQuery。你知道如何使用原生JS或内置Angular来实现相同的目标? –