我是AngularJS编程的新手,正在研究一个示例应用程序。我从服务中返回一个对象时遇到了一个问题。请考虑在我的自定义服务中使用以下代码:
this.getCompanyInfo = function(companyID)
{
console.log( companyID );
angular.forEach( companyInfo, function( coInf ) {
if( coInf.companyID == companyID )
{
console.log(coInf);
return coInf;
}
})
}
在此代码中,companyInfo
是一个包含公司信息的数组,每个公司都由一个对象表示。第二个console.log
显示了这个:
Object {companyID: "CHCL", companyName: "Chilime Hydropower", stockPriceTrend: Array[4]}
在我的控制器中,我有这个:
$scope.companyInfo = dataServices.getCompanyInfo( $routeParams.companyID);
console.log($scope.companyInfo);
但是在这里,console.log
表示“未定义”。
我不知道我一直在做什么,任何帮助都将受到高度赞赏!
的问候。
答案 0 :(得分:2)
您只是从forEach的迭代器函数参数(不是来自getCompanyInfo
)返回,它仍然会继续。但是您需要从getCompanyInfo
函数返回实际值。你可以使用一个简单的for循环,并在找到匹配后返回值。
this.getCompanyInfo = function(companyID)
{
var cInfo, i, l;
for(i=0,l=companyInfo.length; i<l;i++){
if((cInfo = companyInfo[i]).companyID === companyID ){
return cInfo ;
}
}
}
从迭代器函数返回不会破坏使用angular.forEach
的循环。循环仍然会继续。
答案 1 :(得分:1)
将功能更改为
this.getCompanyInfo = function(companyID)
{
var coInfo;
console.log( companyID );
angular.forEach( companyInfo, function( coInf ) {
if( coInf.companyID == companyID )
{
console.log(coInf);
coInfo = coInf;
}
})
return coInfo;
}
您没有从函数返回值,而是从forEach返回值,并且不会从函数返回值。
它与angular无关,顺便说一句。
修改强>
你也可以使用像lodash / underscore这样的库来搜索/过滤功能