web-dev-qa-db-ja.com

AngularJs配列チェックのインラインチェック

AngularJsのインラインは何かが配列であるかどうかを確認する方法はありますか?

私はこれがうまくいくと思ったでしょう:

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

私はそれが実際に配列であることを確認しました。私が欠けているものや別の方法がありますか?

17
Adam

angular.isArrayスコープ上...

$scope.isArray = angular.isArray;

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

フィドル

39
Anthony Chu

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>
6
SirTophamHatt

ロジックをビューから分離します。スコープに状態を追加してから確認してください

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

ビューで

<div ng-show="showHi">Hi</div>
1
Lukasz Madon