2016-03-15 28 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來實現相同的目標? –