迭代JSON属性

时间:2016-04-19 04:30:05

标签: angularjs json

我已成功使用angular中的$http服务来使用其API从另一台服务器中提取JSON对象。然后我能够显示如此值......

<div ng-controller="ApiController as ApiCtrl">
{{ApiCtrl.Api.status}}
{{ApiCtrl.Api.meta.count}}
{{ApiCtrl.Api.data[0].nickname}}
{{ApiCtrl.Api.data[0].account_id}}
</div>

这会正确显示值,但我无法显示密钥。我四处阅读,herehere。他们解释说有一个ng-repeat被设置为迭代一个对象并从中拉出keysvalues

<div ng-controller="ApiController as ApiCtrl">
  <div>
    <div ng-repeat="(key, value) in Api">
        {{key}} : {{value}}
    </div>
  </div>
</div> 

作为参考,这是ApiController

function ApiController($http) {
    var vm = this;
    vm.Api = [];

    $http.get('...').success(function (data) {
    vm.Api = data;
    });
};

这是我要求的Json

{
"status": "ok",
"meta": {
    "count": 1
},
"data": [
    {
        "nickname": "Mitcha47",
        "account_id": 1001356515
    }
]
}

第二种方法ng-repeat="(key, value) in Api"不起作用,只在html中的Api *中显示* ngRepeat :(键,值)

我很困惑为什么它不起作用,并且不确定它是不正确使用语法还是不了解ng-repeat如何完全有效。

修改

在ApiCtrl.Api中更改为div ng-repeat =“(键,值)后”生成了这个 - &gt;

 status : ok
 meta : {"count":1}
 data : [{"nickname":"Mitcha47","account_id":1001356515}]'

哪个好,但不完全是放入表格的格式,这是下一步。是否可以使用.fromJson函数修复此问题?

我是否包含ApiCtrl,因为可以在每个模块中使用多个控制器,从而使一切指向正确的值?

3 个答案:

答案 0 :(得分:1)

您需要在ng-repeat中指定控制器。

修改

根据docs,当您使用controller as声明方法时,属性直接绑定到控制器而不是使用$ scope,因此您需要指定控制器,因为{{1} object是该控制器的属性。

我已更改了代码段以在表格中显示数据,但我不确定您要显示的内容。你能举个例子吗?

Api

<div ng-repeat="(key, value) in ApiCtrl.Api">
angular.module("app", [])
  .controller("ApiController", ApiController);

function ApiController($http) {
  var vm = this;

  vm.Api = {
    status: "good",
    meta: {
      count: 42
    },
    data: [{
      nickname: "Timmy",
      account_id: 1
    }, {
      nickname: "Johnny",
      account_id: 2
    }]
  };
};
table {
  border-collapse: collapse;
}

th,
td {
  border: 1px solid black;
  padding: 5px;
}

th {
  text-align: left;
}

答案 1 :(得分:1)

可能出现问题:

应该是 -

    <div ng-repeat="(key, value) in ApiCtrl.Api">
     {{key}} : {{value}}
    </div>

而不是 -

    <div ng-repeat="(key, value) in Api">
     {{key}} : {{value}}
    </div>

答案 2 :(得分:0)

如果您使用控制器作为语法,则必须使用

void RBapp::processInsert(string &str)
{
  string *key = new string();
  string *satData = new string();
  int i = 0, j =0;
  while(str[i]!=" ")
  {
    key[j] = str[i];
    i++;
    j++;
  }
  j = 0;
  while(str[i]!='\0')
  {
    satData[j] = str[i];
    i++;
    j++;
  }
  myRBT.rbInsert(key, satData);
}