我的应用程序有一个在控制器中调用的服务。该服务向下发送一组对象。我的控制器不需要返回所有数据,而是只想获取我需要的数据。有没有办法构造被返回的对象数组,以便我只包含我需要的数据?
示例:
$scope.information = [];
var loadData = function() {
var promise = myService.getData();
promise.then(function(data) {
$scope.information = data.Information;
},
function (dataError) {
console.log(dataError);
)};
};
在上面的示例中,data.Information是一个对象数组,如下所示:
{
id: 1,
name: 'joe',
age: '21',
hair: 'blue',
height: '70',
}
在我的控制器中,我只需要'id'和'name'属性,而不是其他属性。我不应该只想检索必要的数据吗?我可以构造我的$ scope变量,所以我只在对象中有这些数据,因为不包含任何不必要的信息,导致前端膨胀吗?
答案 0 :(得分:1)
这应该很容易 - 你有很多选择来实现这一点,这里有一个:
$scope.information = [];
var loadData = function() {
var promise = myService.getData();
promise.then(function(data) {
$scope.information = data.Information.map(function(d) {
return {
id: d.id,
name: d.name
};
});
},
function (dataError) {
console.log(dataError);
)};
};
(我没有测试过这段代码,所以你可能需要稍微调整一下)
答案 1 :(得分:1)
您希望将map
操作应用于列表。即:对于列表中的每个项目,您希望以某种方式修改列表中的每个项目。您可以使用Array.prototype.map
来完成此任务。 Here is a link到MDN文档以供参考。
E.g。
$scope.information = data.Information.map(function(element) {
return {
id: element.id,
name: element.name
}
});
答案 2 :(得分:0)
的Tamas'答案是在从“服务”中提取数据后过滤数据的一个很好的例子。在我正在处理的应用程序中,从我们的服务'计算记录的某些字段有时会很昂贵,这实际上是一个带有REST API的后端服务器。我们最终做的相当于
var loadData = function() {
var promise = myService.getData({fields: "name,id"});
promise.then(function(data) {
$scope.information = data;
});
},
function (dataError) {
console.log(dataError);
)};
};
然后服务或后端为我们进行过滤,发回的唯一数据正是我们所需要的。 如果你可以实现(或说服服务维护者实施)这种过滤,那么你可以考虑另一种方法。
答案 3 :(得分:0)
如果您希望过滤服务中的数据:
app.service("myService", function("$http") {
this.getData() = function() {
return $http.get(url)
.then(function(response) {
return response.data;
});
};
this.informationGet = function() {
var promise = this.getData();
var newPromise = promise.then(function(data) {
var information = data.Information.map(function(d) {
return {
id: d.id,
name: d.name
};
});
return information;
});
return newPromise;
};
});
用法:
var promise = myService.informationGet();
promise.then(function(information) {
$scope.information = information;
},
function (dataError) {
console.log(dataError);
throw dataError;
)};
通过将数据返回到promise的.then
方法,可以创建一个新的promise,它将解析为返回数据的值。