【问题标题】:Check for empty ng-repeat from controller从控制器检查空的 ng-repeat
【发布时间】:2016-02-02 18:07:39
【问题描述】:

我是 angularjs 的新手。我的模板是这样的:

<div ng-repeat="item in values"></div>
<div ng-repeat="item1 in values1"></div>

还有我的控制器:

$scope.openItems = function () {
    $http.get('/api/openItems').success(function (data) {
         $scope.values = data;
    });
};

这工作正常。现在我想显示项目,只要它是空的。

我尝试过这样的事情:

$scope.openItems = function () {
    $http.get('/api/openItems').success(function (data) {
    if ($scope.values.length == 0) {
         $scope.values = data;
    } else {
         $scope.values1 = data;
    }
    });
};

知道如何从控制器检查 ng-repeat 中是否有数据吗?

提前致谢

【问题讨论】:

  • “现在我想显示这些项目,只有它是空的。” 你能澄清一下你的意思吗,因为我的解释是你只想显示如果它是空的,重复?
  • 你真的不需要控制器来检查它:here 是最优化的方法。
  • @ajmajmajma 我的意思是如果第一个 div 是空的,我想在其中显示数据。如果第一个 div 有数据,我想在第二个中显示数据。

标签: angularjs angularjs-ng-repeat


【解决方案1】:

确保您在顶部初始化数组,然后您可以执行以下操作:

 //initialize vars
 $scope.values = [];
 $scope.values1 = [];


$scope.openItems = function () {
    $http.get('/api/openItems').success(function (data) {
    if ($scope.values.length === 0) {
         //you may or may not want to clear the second array if you are toggling back and forth
         $scope.values1 = [];
         $scope.values = data;
    } else {
         //empty the first one so we make the hide/show logic simple
         $scope.values = [];
         $scope.values1 = data;
    }
    });
};

那么你的 html 看起来就像

<div ng-show="values.length" ng-repeat="item in values"></div>
<div ng-show="values1.length" ng-repeat="item1 in values1"></div>

这是概念的快速证明 - http://jsfiddle.net/Lzgts/573/

如果您希望 div 真正从 DOM 中移除,您也可以将 ng-show 与 ng-if 交换。

【讨论】:

    【解决方案2】:

    根据您的数组的初始化方式(我们没有看到),它可能永远不会有 length==0(例如,我认为它可能是未定义的等),您可以尝试:

    if ($scope.values.length != 0) {
            $scope.values1 = data; 
        } else {
            $scope.values = data;
        }
    

    【讨论】:

    • 我的数组似乎没有初始化。它是在 ajax 调用返回数据时创建的。
    • 你是对的......我应该检查未定义。所以 if (!$scope.values1) {$scope.values1 = data; return;} 变魔术。谢谢!
    • @user1246072 不要检查未定义的,在使用之前初始化范围变量。
    猜你喜欢
    • 2014-03-15
    • 1970-01-01
    • 2012-12-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多