AngularJs Inline Проверьте, проверяется ли массив

Inline in AngularJs есть способ проверить, что-то есть массив?

Я бы подумал, что это сработает:

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

Я проверил, что это фактически массив. Есть что-то, чего я не вижу или по-другому?

Ответы

Ответ 1

Вы можете поместить angular.isArray в область...

$scope.isArray = angular.isArray;

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

Fiddle

Ответ 2

Вы можете создавать глобальные фильтры для использования в 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>

Вы также можете ввести службу фильтра $в свой контроллер, чтобы получить доступ к настраиваемому фильтру по имени и вычислить отфильтрованные результаты при создании экземпляра контроллера (а также при изменении данных). Это предотвращает проблемы с производительностью из-за быстрого вычисления вычисления выражения.

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>

Ответ 3

Я бы отделил логику от представления. Добавьте состояние в область действия, а затем проверьте его

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

В поле зрения

<div ng-show="showHi">Hi</div>