web-dev-qa-db-fra.com

Vérifiez si la valeur du tableau dans angular template?

Est-il possible de vérifier si une valeur est dans un tableau dans un modèle angular?? Je cherche quelque chose comme ceci:

<div ng-class="{'myClass':1 in [1,2,5]}">Yay</div>

Où myClass est appliqué si 1 est dans le tableau.

Est-ce possible?

Et en passant, quel moteur de gabarit est utilisé avec Angularjs? Où puis-je trouver de la documentation pour cela? À chaque fois que j'essaie de chercher (même dans les documents officiels), il me semble que les documents ne sont que des directives ou des liaisons de données.

36
Anonymous

Vous pouvez utiliser indexOf() pour vérifier si une valeur est dans un tableau, puis l'utiliser dans votre ngClass comme ceci (pour ajouter de manière conditionnelle "newclass"):

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

Ou plus probablement, vous voudrez tester sur un tableau de votre portée:

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

En supposant, par exemple, que vous ayez déclaré tarray dans votre contrôleur:

$scope.tarray=[1,2,5];

démo

En ce qui concerne le moteur de template, il est intégré à Angular. Donc, il n'y a pas vraiment quelque chose de séparé à rechercher. Mais voici les docs de modèles de niveau supérieur et il y a quelques bons tutoriels vidéo ici que les modèles de couverture (par exemple, le premier concerne la liaison de données), ainsi que bien d'autres.

71
KayakDave

Vous pouvez créer un filtre pour vérifier cela. Quelque chose comme:

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

Ensuite, vous pouvez l’utiliser dans votre modèle avec:

<div ng-class="{'newclass': tarray | inArray : 1}">Yay</div>

L'avantage est que cela rend votre modèle plus lisible.

13
Martin

Essaye ça:

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

si la valeur n'est pas dans le tableau, vous obtenez 0 donc avec !! vous obtenez faux

5
Whisher