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?
Vous pouvez mettre angular.isArray
sur la portée ...
$scope.isArray = angular.isArray;
<div ng-show="isArray(textStuff[0][1])">Hi</div>
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>
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>