以表格格式使用ng-repeat

时间:2015-04-05 06:41:32

标签: javascript angularjs angularjs-ng-repeat

我的Angular.js模块中有以下数组:

$scope.hsbody = []; //Data array
$scope.hsresult = []; //Data array
$scope.hsProcess = []; //Boolean array
$scope.hssuccess = []; //Boolean array
$scope.hsfailure = []; //Boolean array
$scope.hsExpand = []; //Boolean array
$scope.hsExpandUser = []; //Boolean array

我想在我的Html页面中显示数组项:

hsresult
hsbody
hsresult
hsbody
and so on..

所以我做了以下事情:

    <div>
        <pre>
            <table class="table table-condensed">
                  <tr ng-repeat="hs in hsbody track by $i" ng-show="hsProcess[i] && !hssuccess[i] && !hsfailure[i]" class="warning"><td><div class="glyphicon"></div>{{hsbody}}</td></tr>
                  <tr ng-show="hssuccess" ng-repeat="highstate in hsbody track by $i" class="success"><td><div class="glyphicon" ng-show="!hsExpand[i]"></div><div class="glyphicon" ng-show="hsExpand[i]"></div>{{ hsresult[i] }} </td></tr>
                  <tr ng-show="hsfailure" ng-repeat="hs in hsbody track by $i" class="danger"><td><div class="glyphicon" ng-show="!hsExpand"></div><div class="glyphicon" ng-show="hsExpand[i]"></div>{{ hsresult[i] }}</td></tr>
                  <tr ng-repeat="hs in hsbody track by $i" ng-show="(hsProcess[i] && hsExpand[i]) || (hsExpand[i] && hsfailure[i])" class="active"><td><pre>{{ hsbody[i] }}</pre></td></tr>
            </table>
        </pre>
    </div>

问题是我的HTML中没有显示任何内容。但当我摆脱ng-repeat并使用i=0时,我就能看到这些值。

我似乎没有正确使用ng-repeat,但我不知道我错在哪里。

3 个答案:

答案 0 :(得分:0)

如果你想使用带索引的“track by”,你应该在那里写:“track by $ index”。 祝你好运!

答案 1 :(得分:0)

在任何包含&#39; ng-repeat&#39;你必须通过ng-repeat中指定的任何内容来引用所有内容。

e.g。说你在控制器&#39;数据&#39;中有一个数组&#39; main&#39;。

您在data.main

中的对象中拥有用户名
$scope.main = [
    {username: 'jeff'},
    {username: 'brad'},
]

this.main = [
    {username: 'jeff'},
    {username: 'brad'},
]

如果你写了

<div ng-repeat="theData in data.main track by $i">
    {{ data.main.username }}
</div>

会出现错误,因为它未定义。

如果你写了

<div ng-repeat="theData in data.main track by $i">
    {{ theData.username }}
</div>

你会得到你想要的东西。

原因是您指定了数据作为ng-repeat中所有内容的来源。

对于ng-repeat

内部,data等同于data.main

您无法访问div内的对象data.main之外的任何内容。

如果您需要外面的任何事情,请再想一想。您是否真的希望多次打印数据?

答案 2 :(得分:0)

这对你有用吗?

    <div>
    <pre>
        <table class="table table-condensed">
            <tr ng-repeat="hs in hsbody track by $index" ng-show="hsProcess[$index] && !hssuccess[$index] && !hsfailure[$index]" class="warning">
                <td>
                    <div class="glyphicon"></div>{{hs}}
                </td>
            </tr>
            <tr ng-show="hssuccess" ng-repeat="highstate in hsbody track by $index" class="success">
                <td>
                    <div class="glyphicon" ng-show="!hsExpand[i]"></div>
                    <div class="glyphicon" ng-show="hsExpand[$index]"></div>{{ hsresult[$index] }} 
                </td>
            </tr>
            <tr ng-show="hsfailure" ng-repeat="hs in hsbody track by $index" class="danger">
                <td>
                    <div class="glyphicon" ng-show="!hsExpand"></div>    
                    <div class="glyphicon" ng-show="hsExpand[i]"></div>{{ hsresult[$index] }}
                </td>
            </tr>
            <tr ng-repeat="hs in hsbody track by $index" ng-show="(hsProcess[$index] && hsExpand[$index]) || (hsExpand[$index] && hsfailure[$index])" class="active">
                <td>
                    <pre>{{ hsbody[$index] }}</pre>
                </td>
            </tr>
        </table>
    </pre>
</div>