我有一组项目如下。 (我无法控制变量的名称)
pubDate0,pubDate1,pubDate2
他们是这样访问的
<div>
<i>
{{newsData.pubDate0[0]}}
</i>
</div>
<div>
<i>
{{newsData.pubDate1[0]}}
</i>
</div>
<div>
<i>
{{newsData.pubDate2[0]}}
</i>
</div>
是否有使用ng-repeat
连接此变量名称,以便我不必编写所有这些重复代码?
我在ng-repeat
内部尝试了以下内容,以及更多类似的组合。
<p ng-repeat="t in getTimes(10) track by $index"> //force looped 10 times
{{(newsData.pubDate+$index+[0])}}
</p>
//Tried the following as well
{{(newsData.pubDate+$index+[0])}}
{{('newsData.pubDate'+$index+[0])}}
{{('newsData.pubDate'+$index+'[0]')}}
{{newsData.pubDate+$index+[0]}}
{{newsData.pubDate+($index)+[0]}}
{{newsData.pubDate+{{$index}}+[0]}}
{{newsData.pubDate($index)[0]}}
{{newsData.pubDate$index[0]}}
{{newsData.pubDate{{$index}}[0]}}
{{newsData.pubDate+$index+[0]}}
用完了猜测。 :(
答案 0 :(得分:1)
您有两种方法可以访问js属性:
var obj = {prop1: 'p1', prop2: 'p2'};
console.log(obj.prop1); //p1
var propName = 'prop';
var index = 1;
console.log(obj[propName + index]); //p1
简单地说,使用第二种方式:
newsData['pubDate'+$index][0];
答案 1 :(得分:0)
如果你知道长度,你可以简单地使用new Array(10)
看到下面的代码;
//Controller:
$scope.getTimes = function(x) {
return new Array(x);
}
<p ng-repeat="t in getTimes(10) track by $index"> //force looped 10 times
{{(newsData['pubDate'+$index][0])}}
</p>
但是我会在解析承诺之前将数据转换为我想要的方式(或者将数据分配给范围),如果你在整个应用程序中使用数据,我肯定会建议。
假设以下代码是您的服务电话;
var getAllNews = function() {
var deferred = $q.defer();
$http.get('/api/news')
.success(function (resultNews) {
var pubDates = []; //will be new pubDate array
for (var key in resultNews) {
//check if it is a pubDate
if (key.indexOf("pubDate") === 0) {
pubDates.push(resultNews[key]); // add it to array
delete resultNews[key]; // remove from the object
}
}
//finally assign new array as a property of result
resultNews.pubDates = pubDates;
deferred.resolve(resultNews);
});
return deferred.promise;
};
但是第二种方法可能会遇到与项目顺序相关的问题,因为浏览器有新的承诺按顺序返回它们(即使它们是)。