在AngularJs中,内联方式是否有一种方法可以检查某个内容是否为数组?
我本以为以下方法会起作用:
<div ng-show="Array.isArray(textStuff[0][1])">Hi</div>
我已验证它确实是一个数组。我是否遗漏了什么或者还有其他方法?
您可以在作用域上放置angular.isArray
...
$scope.isArray = angular.isArray;
<div ng-show="isArray(textStuff[0][1])">Hi</div>
你可以创建全局过滤器,用于在JS或HTML中检查对象类型。这样,您就不会像原答案那样污染您的$rootScope或$scope以便在任何地方使用。Angular还具有一些内置实用程序函数,可以检查对象类型:
angular
.module("yourModule")
.filter("isArray", function() {
return function(input) {
return angular.isArray(input);
};
});
<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>
ng-show="isArray()"
,然后在你的控制器中加入$scope.isArray = function(){ return Array.isArray(textStuff[0][1]) }
。 - Ronnie