2017-11-28 8 views
0

track by $indexをng-repeatテーブルで動作させることができません。私は "期待された配列だが受信された:0"というエラーを得る。問題は、私のJSONはIDを持っていないので、各行にIDを作成する必要があるということです。

コントローラー:

function getContainer() { 
    $http.get("/api/containers") 
     .then(function (response) { 
       $scope.GTMcontainersAccount = response.data; 
       $scope.loading = false; 
     }) 
} 

$ scope.GTMcontainersAccountが含まれています(JSON):

{ 
    "0": [], 
    "Account2": [{ 
     "accountId": "1746****", 
     "containerId": "745****", 
    }, { 
     "accountId": "1746****", 
     "containerId": "751****", 
    }], 
    "Account 1": [{ 
     "accountId": "17661****", 
     "containerId": "748****", 
    }] 
} 

ビュー:

<table class="table"> 
        <thead> 
        <tr> 
         <th>AccountName</th> 
         <th>AccountID</th> 
         <th>ContainerID</th> 
         <th>ContainerName</th> 
         <th>Path</th> 

        </tr> 
        </thead> 

        <tbody ng-repeat="(k,v) in GTMcontainersAccount"> 
        <tr ng-if="!GTMcontainersAccount" colspan="4"> 
         <td>No Containers found for this account</td> 
        </tr> 
        <div id="loading" name="loading" layout="row" layout-sm="column" layout-align="space-around" 
         ng-show="loading"> 
         <md-progress-circular ng-show="loading" md-mode="indeterminate"></md-progress-circular> 
        </div> 


        <tr ng-repeat="(k1,v1) in v | filter:search:strict"> 
         <td>{{ k }}</td> 
         <td>{{ v1.accountId }}</td> 
         <td ng-model="v1.containerId">{{ v1.containerId }}</td> 
         <td>{{ v1.name }}</td> 
         <td><a href="/gui/tags/{{v1.path}}">View Container</a></td> 
         <td> 
          <md-button ng-init="item.isyellow = false;" ng-class="{yellow : item.isyellow}" ng-click="item.isyellow =!item.isyellow; AddFavorite(item.isyellow,v1.containerId)" class="md-icon-button md-accent md-warn" aria-label="Favorite""> 
           <span ng-init="item.isyellow = false;" ng-class="{yellow : item.isyellow}" class="glyphicon glyphicon-heart"></span> 
          </md-button> 
         </td> 
         <td> 
          <md-button type="button" ng-click="row.selected=!row.selected; Hidecontainer(row.selected, v1.containerId);movePerson(index);" class="pull-right btn btn-xs"> 
           <span ng-class="{'glyphicon':true, 'glyphicon-ok':row.selected, 'glyphicon-plus':!row.selected}"></span> 
           {{row.selected?'Hidden':''}} 
          </md-button> 
         </td> 
        </tr> 
        </tbody> 
       </table> 

コンソールに入るエラーコード:

main.min.js:3 Error: [filter:notarray] Expected array but received: 0

+0

に*を作成することができますどちらかと言います*実行可能**問題を再現する[mcve] – charlietfl

+0

これは@charlietflになりますが、何が欠けていますか? – Asim

+1

また、 '

{{v|json}}
'のようなものを追加することで、ビュー内のデータを調べることも簡単です。配列を使って作業していると思っていますが、そうでない場合はエラーが表示されます – charlietfl

答えて

0

角度filtersは配列でありオブジェクトではありません。

角度のドキュメントは

Selects a subset of items from array and returns it as a new array.

あなたは配列にオブジェクトを変換することができたり、

<div ng-repeat="(k1,v1) in v | filter:searchFn()"> 
    <td>{{ k1 }}</td> 
    <td>{{ v1.accountId }}</td> 
    ... 
</div> 

のように手動でオブジェクトをフィルタリングし、コントローラ

$scope.searchFn = function(searchObject) { 
    var result = {}; 
    angular.forEach(items, function(value, key) { 
     //your condition 
    }); 
    return result; 
} 
関連する問題