web-dev-qa-db-fra.com

AngularJs Inline Vérifier si un tableau vérifie

Inline dans AngularJs existe-t-il un moyen de vérifier si quelque chose est un tableau?

J'aurais pensé que cela fonctionne:

<div ng-show="Array.isArray(textStuff[0][1])">Hi</div>

J'ai vérifié que c'est en fait un tableau. Y a-t-il quelque chose qui me manque ou d'une autre manière?

17
Adam

Vous pouvez mettre angular.isArray sur la portée ...

$scope.isArray = angular.isArray;

<div ng-show="isArray(textStuff[0][1])">Hi</div>

Fiddle

37
Anthony Chu

Vous pouvez créer des filtres globaux à utiliser dans votre JS ou HTML pour vérifier les types d'objet. De cette façon, vous ne polluez pas votre $ rootScope ou $ scopes pour l'utiliser partout, contrairement à la réponse acceptée ... Angular possède également des fonctions utilitaires intégrées permettant de vérifier les types d'objets:

angular
    .module("yourModule")
    .filter("isArray", function() {
        return function(input) {
            return angular.isArray(input);
        };
    });

En HTML:

<div ng-show="{{ textStuff[0][1]) | isArray }}">Hi</div>

Vous pouvez également injecter le service $ filter dans votre contrôleur pour accéder au filtre personnalisé par nom et calculer les résultats filtrés lorsque votre instance de contrôleur est instanciée (et également lorsque vos données sont modifiées). Cela évite les problèmes de performances dus au fait que l'expression de la vue soit calculée rapidement. 

angular
    .module("yourModule")
    .controller("MyController", MyController);

MyController.$inject = ["$filter", "$scope"];

function MyController($filter, $scope) {

    this.testStuff = []; // your data
    this.filteredResult = $filter("isArray")(this.testStuff[0][1]);

    // or if you need to watch for data changes
    var vm = this;

    $scope.$watchCollection(
        function() { return vm.testStuff },
        function(newTestStuff) {  
            vm.filteredResult = $filter("isArray")(newTestStuff[0][1]);
        } 
    );
}

<div ng-controller="MyController as my">
    <div ng-show="my.filterResult">Hi</div>
</div>
6
SirTophamHatt

Je séparerais la logique de la vue. Ajouter l'état dans la portée et ensuite le vérifier

 $scope.showHi = angular.isArray(textStuff[0][1]);

En vue

<div ng-show="showHi">Hi</div>
1
Lukasz Madon