Angular:如果项目的 属性 不存在,则在 ng-repeat 中设置默认值

Angular: Set a default value in ng-repeat if an item's property does not exist

是否有可能在 ng-repeat 期间,如果当前项目没有某个 属性,我为其分配一个默认值,类似这样:

<div ng-repeat="item in items" ng-init="item.prop = item.prop || default value"></div>

如果你想显示默认值,它将是:

<div ng-repeat="item in items">
    <div>{{ item.prop || 'Nothing' }}</div>
</div>

如果你想为数组的每个对象分配它,那么在你的控制器中做:

angular.forEach($scope.items, function (item) {
    item.prop = item.prop || 'Nothing';
});

我对您的代码进行了一些更改,它运行正常...

来自:

item.prop = item.prop || default value

至:

new_prop = item.prop || default value

并使用 new_prop 而不是 item.prop

<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>

<script>
  angular.module('app', [])
  .controller('MainCtrl', function($scope) {
    $scope.list = [
      {name: 'a', idx: 1},
      {name: 'b'},
      {name: 'c', idx: 2},
    ];  
  });
</script>

<div ng-app="app" ng-controller="MainCtrl">
  <div ng-repeat="each in list" ng-init="idx = each.idx || 0">
    <span ng-bind="idx"></span>
    <span ng-bind="each.name"></span>
  </div>
  
</div>

最佳实践

这取决于您从何处获取数据,如果您通过 http 请求获取数据,您的数据库中可能应该有默认值。

选项 1

使用 angular 的内置默认管道字符,例如下面的 ng-bind

<span ng-bind="myVariable || 'My default value'"></span>

备选方案 2

您可以在设置 $scope 之前在循环中编写 if 语句。像这样的东西会进入你的控制器。

if ($scope.data.someData == null){
  $scope.data.someData = yourDefultValue
}

这只是一个概括,您必须将其适应您的代码,但我建议您将默认值放入您的数据库中。它很容易做,如果有你想要的默认值就应该做。