2015-08-23 51 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