如果列表为空,则显示角度显示消息

时间:2014-09-15 10:28:22

标签: angularjs sharepoint ng-repeat ng-show

我在sharepoint应用部分中显示当前用户有权访问的子网站。

我设法隐藏或显示一条消息说“#34;没有可用的网站"如果我的app.js在scope.array中返回0。

但是,在列表加载完毕之前以及列表加载消息消息之前,消息正在显示。我该如何解决这个问题?

我在带有文本框的表格中有一个ng-repeat用于过滤:

<input type="text" ng-model="text" placeholder="Filter..." />

<div ng-controller="MainCtrl">
    <table>
        <thead>
            <tr>
                <th>
                    Site
                </th>
                <th>
                    Created
                </th>
            </tr>
        </thead>
        <tbody ng-repeat="site in sites | filter:text">
            <tr>
                <td>
                  {{site.title}}
                </td>
                <td>
                  {{site.created | date:dateFormat}}
                </td>
            </tr>
        </tbody>
    </table>
    <div ng-show="!(sites| filter:text).length">There is no sites avaiable for you.</div>
</div>

我知道ng-show在执行ng-repeat的表格之外,但是我尝试在tbody中插入ng-show div但是如果没有站点存在则表格永远不会执行。< / p>

另外,如果数组为空,如何禁用过滤器文本框?尝试使用与ng-show相同的属性,但是在ng-disabled中,但这不起作用。

2 个答案:

答案 0 :(得分:3)

等待成功回调以确定在显示消息之前没有结果。

//view
<div ng-controller="MainCtrl">
  <div ng-show="loading">Loading..</div>
  <input ng-hide="noSites" ng-model="text" placeholder="Filter...">
  //table ..
  <div ng-show="noSites">
    There are no sites available for you.
  </div>
</div>

//controller
app.controller('MainCtrl', function($scope) {

    //initialize
    $scope.loading = true
    $scope.noSites = false

    //sharepoint code to get sites
    .success(function(data) {
      if (data.length != 0) {
        $scope.sites = data
      } else {
        $scope.noSites = true
      }
      $scope.loading = false
    })
})

答案 1 :(得分:2)

<input type="text" ng-model="text" placeholder="Filter..." />

将此内容放在<div ng-controller="MainCtrl">.. div

并修改此

<div ng-show="!sites.length" style="display:none">There is no sites avaiable for you.</div> // added `display:none