javascript - Angular : Using ngShow and Hide to remove spinner if no data returned

标签 javascript jquery html angularjs

我有下面的 HTML,它显示一个微调器,直到显示应用程序的标签列表。但是,如果也不存在任何事件,则旋转器将继续。

我希望微调器消失,并且输入只是空白,或者向用户返回一条消息,表明此应用程序没有标签。不知道如何在保持代码整洁的同时做到这一点!

HTML:

<div ng-show="noun === 'Tag'">
  <div class="spinner" ng-hide="loadedTags()">
    <i class="fa fa-spinner fa-pulse"></i>
  </div>
  <div ng-show="loadedTags()">
    <select ol-filter-select="tags" ng-model="tagName">
      <option ng-value="name" ng-repeat="name in tagNames()" ng-bind="name"   ng-selected="tagName === name">
      </option>
    </select>
  </div>
</div>

Controller :

$scope.loadedTags = function() {
  return !_.isEmpty($scope.tags);
};

查看:

如果没有标签,旋转器会一直旋转...

enter image description here

最佳答案

我认为您需要显示更多实际加载标签的代码。您是否通过 $http.get 或类似的方式从服务器加载标签?如果是这样,那么通常完成此操作的方法是使用一个 bool 范围变量来专门表示当前正在进行加载这一事实。该变量将控制微调器是否可见。例如,我有如下所示的通用代码:

Angular Controller 的构造函数:

$scope.loadingInProgress = true;

$http.get(myUrl)
.then(function(result) { 
    // My success function
    $scope.tags = result.data; 
    $scope.loadingInProgress = false;
},
function() { 
    // My failure function
    $scope.loadingInProgress = false; 
});

HTML:

  <div class="spinner" ng-show="loadingInProgress">
    <i class="fa fa-spinner fa-pulse"></i>
  </div>

您似乎试图避免使用额外的作用域变量来表示加载状态,因此您试图根据加载结果来计算加载状态。但这并不真正可靠。加载的结果可以是任何内容,并且并不真正指示加载是否正在进行。

关于javascript - Angular : Using ngShow and Hide to remove spinner if no data returned,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29932573/

相关文章:

javascript - 如何在打开下拉菜单时隐藏当前选定的选项

javascript - 将复选框放在 JavaScript 的组合框中

html - Internet Explorer 8 不为具有相同类的两个元素加载 CSS 的问题

javascript - AngularJS:如何在使用路由时更新变量值

javascript - 无法使用 JS 设置 CSS 规则

javascript - 在维护 HTML 的同时避免 JavaScript 注入(inject)?

javascript - 为什么 javascript void 语句对表达式求值?

JQuery Mobile - 隐藏下拉选项

php - 使用ajax完成我的搜索输入

javascript - 将鼠标悬停在父 div 上时同时更改图像和标题