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
在我看來,大括號,但它似乎很多代碼複製。它是角度的「特徵」還是我錯過了某些東西?謝謝。
模板中不能有這樣的邏輯,這很好:模板必須乾淨而簡單。 – dfsq
@dfsq,好吧,我明白了,表達式的角度文檔禁止函數聲明。好像我必須在一個有很多代碼重複的控制器中編寫這個邏輯,但是,嘿,應該有一些編程例程:) –
你不必重複代碼,有很多方法可以避免這種情況。服務,mixin,甚至控制器繼承。 – dfsq