我目前在代码方面遇到了困难。
首先,我有一个像[{Id:1, Name:"AML", allowedToView:"1,2"}, {Id:2, Name:"Res", allowedToView:"1"}...]
这样的对象数组来自我的服务
我在变量$scope.listofResource
然后在我的一个对象中,我有allowedToView
个密钥,它是我用逗号分隔的用户ID的集合。
然后我有了这段代码......
的Javascript
$scope.listofResource = msg.data
for (var i = 0; i < msg.data.length; i++) {
首先我运行for循环,这样我就可以将Id's
键中每个用户的allowedToView
分开
var allowed = msg.data[i].allowedToView.split(",");
var x = [];
然后我创建了一个变量x
,这样我就可以使用allowedId
的键来推送一个新对象,基本上是用户的Id和resId
的ID。资源
for (var a = 0; a < allowed.length; a++) {
x.push({ allowedId: allowed[a], resId: msg.data[i].Id });
}
然后我把它放在Promise.all
中,因为我必须使用服务获取“允许用户”的名称
Promise.all(x.map(function (prop) {
var d = {
allowedId: parseInt(prop.allowedId)
}
return ResourceService.getAllowedUsers(d).then(function (msg1) {
msg1.data[0].resId = prop.resId;
此处返回允许用户的ID和名称。我必须插入resId
,以便它可以传递给返回对象,它将显示在.then()
下面
return msg1.data[0]
});
})).then(function (result) {
我得到了我想要的结果,但现在这是我的问题
angular.forEach(result, function (val) {
angular.forEach($scope.listofResource, function (vv) {
vv.allowedToView1 = [];
if (val.resId === vv.Id) {
vv.allowedToView1.push(val);
我想更新应该包含对象数组的$scope.listofResource.allowedToView1
,它基本上是允许用户的信息。但每当我在这里推送一个值vv.allowedToView1.push(val);
它总是更新数组的最后一个对象。
}
})
})
});
}
所以我的代码的结果总是这样
[{Id:1, Name:"AML", allowedToView:"1,2", allowedToView:[]}, {Id:2, Name:"Res", allowedToView:"1", allowedToView:[{Id:1, Name:" John Doe"}]}...]
第一个结果始终为空白。任何人都可以帮助我吗?
以下是它的掠夺者...... Plunkr
答案 0 :(得分:0)
链接到解决方案 - Plunkr
for (var i = 0; i < msg.length; i++) {
var allowed = msg[i].allowedToView.split(",");
msg[i].allowedToView1 = [];
var x = [];
正如Aleksey Solovey正确指出的那样,allowedToView1数组的初始化发生在错误的地方。它应该转移到为msg调用一次的地方。我已将它转移到第一个循环中的allowedToView.split之后,因为它似乎是初始化它的合适位置。