在AngularJs中内联是否有办法检查某些内容是否为数组?
我原以为这会起作用:
<div ng-show="Array.isArray(textStuff[0][1])">Hi</div>
我已经确认它实际上是一个数组。我有什么遗漏或其他方式吗?
答案 0 :(得分:38)
您可以将angular.isArray
放在范围内......
$scope.isArray = angular.isArray;
<div ng-show="isArray(textStuff[0][1])">Hi</div>
答案 1 :(得分:6)
您可以创建全局过滤器以在JS或HTML中使用以检查对象类型。这样你就不会污染你的$ rootScope或$ scope来在任何地方使用它,不像接受的答案...... 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服务注入Controller以按名称访问自定义筛选器,并在实例化控制器实例时(以及数据更改时)计算筛选结果。这可以防止由于视图表达式快速计算而导致的性能问题。
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>
答案 2 :(得分:1)
我会将逻辑从视图中分离出来。在范围中添加状态然后检查
$scope.showHi = angular.isArray(textStuff[0][1]);
在视图中
<div ng-show="showHi">Hi</div>