Встроенная проверка AngularJs, если проверка массива
Inline в AngularJs есть ли способ проверить, является ли что-то массивом?
Я бы подумал, что это работает:
<div ng-show="Array.isArray(textStuff[0][1])">Hi</div>
Я проверил это на самом деле массив. Я что-то упускаю или как-то иначе?
3 ответов
вы можете поставить angular.isArray
по сфере...
$scope.isArray = angular.isArray;
<div ng-show="isArray(textStuff[0][1])">Hi</div>
вы можете создавать глобальные фильтры для использования в JS или HTML для проверки типов объектов. Таким образом, вы не загрязняете свой $rootScope или $scopes, чтобы использовать его везде, в отличие от принятого ответа... Angular также имеет некоторые встроенные функции утилиты, которые могут проверять типы объектов:
angular
.module("yourModule")
.filter("isArray", function() {
return function(input) {
return angular.isArray(input);
};
});
в HTML:
<div ng-show="{{ textStuff[0][1]) | isArray }}">Hi</div>
вы также можете ввести службу $filter в свой контроллер, чтобы получить доступ к пользовательскому фильтру по имени и вычислить отфильтрованные результаты, когда ваш контроллер экземпляр создается (а также при изменении данных). Это предотвращает проблемы с производительностью из-за быстрого вычисления выражения представления.
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>
Я бы отделил логику от представления. Добавьте состояние в область, а затем проверьте его
$scope.showHi = angular.isArray(textStuff[0][1]);
в виде
<div ng-show="showHi">Hi</div>