检查角度模板中数组中的值是否为?

Ano*_*ous 37 javascript template-engine angularjs

有没有办法检查角度模板中的值是否在数组中?我期待这样的事情:

<div ng-class="{'myClass':1 in [1,2,5]}">Yay</div>
Run Code Online (Sandbox Code Playgroud)

如果1在数组中,则应用myClass.

这可能吗?

另外,Angularjs使用的是什么模板引擎?我在哪里可以找到它的文档?每当我尝试搜索(甚至是官方文档)时,我似乎只会出现关于指令或数据绑定的文档.

Kay*_*ave 72

你可以indexOf()用来测试一个值是否在数组中然后在你的内部使用它ngClass(有条件地添加"newclass"):

<div ng-class="{'newclass':([1,2,5].indexOf(2) > -1)}">Yay</div>
Run Code Online (Sandbox Code Playgroud)

或者更有可能你想要针对你的范围内的数组进行测试:

<div ng-class="{'newclass':(tarray.indexOf(1) > -1)}">Yay</div>
Run Code Online (Sandbox Code Playgroud)

例如,假设您已tarray在控制器中声明:

$scope.tarray=[1,2,5];
Run Code Online (Sandbox Code Playgroud)

演示

就模板引擎而言,它内置于Angular中.所以搜索并没有什么独立的东西.但这里是顶级模板文档 ,这里有一些很好的视频教程,涵盖模板(例如第一个是数据绑定)以及更多.


Mar*_*tin 13

您可以创建一个过滤器来检查这一点.就像是:

app.filter('inArray', function() {
    return function(array, value) {
        return array.indexOf(value) !== -1;
    };
});
Run Code Online (Sandbox Code Playgroud)

然后,您可以在模板中使用此项:

<div ng-class="{'newclass': tarray | inArray : 1}">Yay</div>
Run Code Online (Sandbox Code Playgroud)

这样做的好处是它使您的模板更具可读性.

  • 很好的解决方案,但我需要在过滤器表达式周围添加括号,以避免角度语法错误.`<div ng-class ="{'newclass':( tarray | inArray:1)}"> Yay </ div>` (3认同)

Whi*_*her 5

试试这个:

ng-class="{'myClass':  !!~[1,2,5].indexOf(1)}"
Run Code Online (Sandbox Code Playgroud)

如果值不在数组中,那么你得到0!你弄错了