如何在 angular 2 或更高版本中显示对象内数组的数据

How to Display data of an array within an object in angular 2 or higher

我的数据有2个办公室,另一个有1个办公室

     "id": "1",
  "username": "test",
  "groups": "Admin",
  "office": [
    {
      "officeid": "2",
      "officename": "moon"
    },
    {
      "officeid": "3",
      "officename": "stars"
    }
  ]
},         "id": "2",
  "username": "john",
  "groups": "guest",
  "office": [
    {
      "officeid": "2",
      "officename": "moon"
    }
  ]
}

我想将办公室显示到文本框。如果数据有 1 个办公室,我应该只显示一个显示办公室名称的文本框,如果数据有 2 个办公室,我应该在一个文本框中显示 2 个办公室。

                   <div class="form-group row">
                    <label class="col-md-2 control-label" for="text-input">Office</label>
                    <div class="col-md-4">
                        <label class="form-control underline"> {{(allUserData.office == "" ? "--No data--" : allUserData.office)}} </label>
                    </div>
               </div>

我应该如何在 html 中显示它?以上是我目前的html。我试图查看其他 *ngFor 方法。它们似乎都不起作用,或者我可能做错了。检索数据的正确方法是什么?谢谢。

首先提供的JSON结构有一些错误,给出的是正确的版本

[
  {
  "id": "1",
  "username": "test",
  "groups": "Admin",
   "office": [
    {
      "officeid": "2",
      "officename": "moon"
    },
    {
      "officeid": "3",
      "officename": "stars"
    }
  ]
  },
  {
  "id": "2",
  "username": "john",
  "groups": "guest",
  "office": [
    {
      "officeid": "2",
      "officename": "moon"
    }
  ]
  }
]

假设您已通过某种服务正确检索到 json 结构。

假设 allUserData 代表给定时间的单个用户。 (如果没有,则需要使用*ngFor)

"office"是一个数组,它可以有多个office对象,分别有两个属性"officeid","officename"。

假设您想访问给定用户的第一个办公室对象的办公室名称,您应该这样做 "allUserData.office[0].officename"

检查给定用户有多少个办公室 "allUserData.office.length" --> 您可以使用它来检查 "no data" 条件 (allUserData.office.length > 0)

首先,您在原始问题中提出的 json 格式不正确,下面我相信我已更正它。

当使用 Angular 时,您必须定义一个 module 和一个 controller 完成后,您可以使用 ng- 指令与车把 {{ }}。更具体地回答你要循环遍历一个数组的问题,你会使用 ng-repeat 所以例如,如果你的数组是 users 你可以做类似 ng-repeat="user in users" 的事情,然后在你下面的元素中可以使用句柄来调用当前用户的 属性,例如{{user.username}}。请参阅下面的完整示例

data = [{"id": "1",
  "username": "test",
  "groups": "Admin",
  "office": [
    {
      "officeid": "2",
      "officename": "moon"
    },
    {
      "officeid": "3",
      "officename": "stars"
    }
  ]
},
{"id": "2",
  "username": "john",
  "groups": "guest",
  "office": [
    {
      "officeid": "2",
      "officename": "moon"
    }
  ]
}];

var myapp = angular.module('myApp',[]);
myapp.controller('myCtrl', function($scope){
 $scope.users = data;
});
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
<div ng-app="myApp" ng-controller="myCtrl">
  <div class="form-group row" ng-repeat="user in users">
    <lable class="col-md-2 control-label" for="text-input">username</lable>
    <input type="text" name="username-{{user.id}}" value="{{user.username}}" /><br/>
    <label class="col-md-2 control-label" for="text-input">user group</label>
    <input type="text" name="usergroup-{{user.id}}" value="{{user.groups}}" /><br/>
    <div class="col-md-4" ng-repeat="office in user.office">
      <label class="form-control underline">officename-{{office.officeid}}</label>
      <input type="text" name="officename-{{office.officeid}}" value="{{office.officename}}" /><br/>
    </div>
  <hr/><!--just for no css example to split users-->
  </div>
  
</div>