Javascript 角度:如果没有返回数据,使用ngShow和Hide删除微调器

Javascript 角度:如果没有返回数据,使用ngShow和Hide删除微调器,javascript,jquery,html,angularjs,Javascript,Jquery,Html,Angularjs,我有下面的HTML显示一个微调器,直到一个应用程序的标签列表显示。但是,如果也不存在任何事件,则微调器将继续 我希望微调器消失,输入为空,或者向用户返回一条消息,说明此应用程序没有标签。不知道如何做到这一点,同时保持代码干净 HTML: 视图: 如果没有标记,微调器将继续旋转 假设您使用的是underline.js,那么上述方法应该有效。你确定控制器与html的作用域相同吗 或许可以尝试以下方法: $scope.loadedTags = function() { return $scope.

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

我希望微调器消失,输入为空,或者向用户返回一条消息,说明此应用程序没有标签。不知道如何做到这一点,同时保持代码干净

HTML:

视图:

如果没有标记,微调器将继续旋转


假设您使用的是underline.js,那么上述方法应该有效。你确定控制器与html的作用域相同吗

或许可以尝试以下方法:

$scope.loadedTags = function() {
  return $scope.tags.length > 0;
};
loadedTags()将仅在摘要周期上进行计算,而不是每次更改$scope.tags时进行计算。 相反,在$scope.tags上创建变量$scope.isVisible watch以更新isVisible状态。
然后,您的ng show=isVisible。

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

角度控制器的构造函数:

$scope.loadedTags = function() {
  return !_.isEmpty($scope.tags);
};
$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:



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

请格式化HTML部分。似乎缺少结束div检查数据的长度和执行决策$scope.tags是什么样子的?是否适当地包括了含铅量?我认为Rathish指出的不正确的HTML是罪魁祸首。请创建一个plnkr/JSFIDLE,这样我们就可以看到问题所在。不清楚您使用的是lodash还是下划线。也不清楚没有标记时$scope.tags的值是多少。您是否使用$http加载标记?不,
ng hide
将在每个摘要周期解析表达式,而不仅仅是一次。是的,您是对的,我的意思是在摘要周期解析一次。更新。仍然错误,您的手表也将在每个摘要周期执行。实际上,
ng hide
创建的观察程序与您建议手动添加的观察程序完全相同。ng-hide在从loadedTags()返回的对象上创建观察程序,这就是为什么您需要自己的范围变量而不是函数调用。如果有监视对象标记,您将在其中更新isVisible的状态-您正在获得请求的行为。
$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; 
});
  <div class="spinner" ng-show="loadingInProgress">
    <i class="fa fa-spinner fa-pulse"></i>
  </div>