Javascript 如何循环这个Json对象(angularJS)?

Javascript 如何循环这个Json对象(angularJS)?,javascript,json,angularjs,Javascript,Json,Angularjs,我正在尝试使用AngularJS循环Json对象中的“选项卡”?我怎么做 var model = { "$id": "1", "tabs": [{ "$id": "2", "id": 2, "name": "Output", "layoutId": 1, "order": 1, "dashboardId": 1 }, { "$id": "15",

我正在尝试使用AngularJS循环Json对象中的“选项卡”?我怎么做

var model = {
    "$id": "1",
    "tabs": [{
        "$id": "2",
        "id": 2,
        "name": "Output",
        "layoutId": 1,
        "order": 1,
        "dashboardId": 1
    }, {
        "$id": "15",
        "id": 3,
        "name": "Yield",
        "layoutId": 1,
        "order": 2,
        "dashboardId": 1
    }, {
        "$id": "24",
        "id": 4,
        "name": "Trend",
        "layoutId": 1,
        "order": 3,
        "dashboardId": 1
    }],
    "id": 1,
    "name": "Test",
    "title": "Test",
    "description": "Test Dashboard",
    "createDate": "2015-06-08T00:00:00+01:00",
    "ownerId": 1,
    "enabled": true
};
当我尝试此操作时,控制台中会显示“未定义”

angular.forEach(model.tabs, function (tab) {
    console.log(tab.name);
});
不知道我做错了什么

编辑: 数据来自ASP.Net控制器:

$http.get("/Dashboards/GetDashboardData").success(function (data) {
            model = data;
            angular.forEach(model.tabs, function (tab) {
                console.log(tab.name);
            });
        }).error(function (data) {
            console.log("error");
        });

我希望在您循环该模型时,它还没有准备好。在inspector打开的情况下运行以下代码-您拥有的代码是正确的,但在您的情况下失败,因为运行循环时,
model
未准备就绪

如果以异步方式加载数据,则需要等待数据返回,或者使用承诺或回调,并通过它进行循环

var模型={
“选项卡”:[{
“名称”:“输出”,
}, {
“名称”:“收益率”,
}, {
“名称”:“趋势”,
}],
};
angular.forEach(model.tabs、function(tab){
console.log(选项卡名称);
});

我希望在您循环该模型时,它还没有准备好。在inspector打开的情况下运行以下代码-您拥有的代码是正确的,但在您的情况下失败,因为运行循环时,
model
未准备就绪

如果以异步方式加载数据,则需要等待数据返回,或者使用承诺或回调,并通过它进行循环

var模型={
“选项卡”:[{
“名称”:“输出”,
}, {
“名称”:“收益率”,
}, {
“名称”:“趋势”,
}],
};
angular.forEach(model.tabs、function(tab){
console.log(选项卡名称);
});

好的,我找到了答案。看起来我的控制器以字符串形式返回Json对象,所以我必须先将其切换到object,然后才能将其用作对象

在循环中使用模型之前,我添加了这一行:

model = JSON.parse(data);
承诺的整个解决方案(不确定我现在是否需要):


好的,我找到答案了。看起来我的控制器以字符串形式返回Json对象,所以我必须先将其切换到object,然后才能将其用作对象

在循环中使用模型之前,我添加了这一行:

model = JSON.parse(data);
承诺的整个解决方案(不确定我现在是否需要):


如果你
console.log(model.tabs)
紧跟在循环之前,它会像你期望的那样出现吗?你能制作一个JSFIDLE吗?它还返回“undefined”工作正常我认为你的模型是异步加载的吗?@Whistler这很奇怪。。因此,当您执行
console.log(model)
并在inspector中查看模型时,您能看到它的
tabs
属性吗?如果您
console.log(model.tabs)
紧跟在循环之前,它是否如您所期望的那样出现?您能制作一个JSFIDLE吗?它还返回“undefined”我觉得很好。你的模型是异步加载的吗?@Whistler,真奇怪。。因此,当您执行
console.log(model)
并在inspector中查看模型时,您能看到它的
选项卡
属性吗?您可能是对的,我的数据由ASP.Net MVC控制器返回$http.get。我可能必须添加承诺?@Whistler使用
$http
调用添加承诺总是一个好主意。@Whistler听起来不错,是的。如果从promise success函数中调用
.forEach
代码块,您应该使一切正常工作。@TonyBarnes我实际上不认为在$http调用中使用promise有什么意义,因为$http本身会返回一个promise。他的示例无论如何都应该有效。您可能是对的,我的数据是由ASP.NETMVC控制器返回的$http.get。我可能必须添加承诺?@Whistler使用
$http
调用添加承诺总是一个好主意。@Whistler听起来不错,是的。如果从promise success函数中调用
.forEach
代码块,您应该使一切正常工作。@TonyBarnes我实际上不认为在$http调用中使用promise有什么意义,因为$http本身会返回一个promise。他的例子无论如何都应该有用。