2015-08-23 23 views
0

說,我有一個數組[null, 'foo', 'bar'],我想對其進行過濾,以去除空值,並加入到一個字符串,像這樣:角度表達解析錯誤試圖篩選數組

[null, 'foo', 'bar'].filter(function(el) { return el !== null; }).join(', ')

如果我寫這段代碼在一個控制器和它的一切工作正常,沒有錯誤。但是,如果我寫在我看來,像大括號的角度表達:

<p>{{ [null, 'foo', 'bar'].filter(function(el) { return el !== null; }).join(', ') }}</p> 

角吐出解析錯誤:

Syntax Error: Token '{' is unexpected, expecting [)] at column 42 of the expression [[null, 'foo', 'bar'].filter(function(el) { return el !== null; }).join(', ')] starting at [{ return el !== null; }).join(', ')]. 

在我的項目,該控制器具有影響這個最終的字符串很多變數,他們在許多功能上發生變化。當然,我可以寫一個函數,最後一個字符串寫入控制器變量,說,vm.finalString,就像這樣:

vm.updateFinalString = function() { 
    vm.finalString = [vm.var1, vm.var2, ...].filter(function(el) { return el !== null; }).join(', '); 
} 

,並注入該功能爲每次改變之後發生改變這些變量函數,呼應vm.finalString在我看來,大括號,但它似乎很多代碼複製。它是角度的「特徵」還是我錯過了某些東西?謝謝。

+3

模板中不能有這樣的邏輯,這很好:模板必須乾淨而簡單。 – dfsq

+1

@dfsq,好吧,我明白了,表達式的角度文檔禁止函數聲明。好像我必須在一個有很多代碼重複的控制器中編寫這個邏輯,但是,嘿,應該有一些編程例程:) –

+0

你不必重複代碼,有很多方法可以避免這種情況。服務,mixin,甚至控制器繼承。 – dfsq

回答

0

你將不得不編寫你自己的自定義過濾器,這裏是關於如何做到這一點的documentation