Angularjs 如何使用ngRepeat将变量从视图传递到作用域
我正在制作一个浏览页面,用户可以在其中看到我的网站搜索方面的顶级术语(我使用的是ElasticSearch/Tire)。我创建了一个对象数组,其中包含搜索所需格式的标题和参数。我希望遍历数组并显示标题,然后显示搜索每个方面的结果。起初,我尝试在控制器中使用for循环来迭代Angularjs 如何使用ngRepeat将变量从视图传递到作用域,angularjs,angularjs-scope,Angularjs,Angularjs Scope,我正在制作一个浏览页面,用户可以在其中看到我的网站搜索方面的顶级术语(我使用的是ElasticSearch/Tire)。我创建了一个对象数组,其中包含搜索所需格式的标题和参数。我希望遍历数组并显示标题,然后显示搜索每个方面的结果。起初,我尝试在控制器中使用for循环来迭代facet\u选择,但这看起来不像是有角度的方式。所以现在我尝试在迭代中使用ng repeat,但我不确定如何将参数从视图传递到控制器。我通读了所有的指令,但我没有看到一个很好的匹配,这让我觉得我可能走错了路 这是一个简化的控制
facet\u选择
,但这看起来不像是有角度的方式。所以现在我尝试在迭代中使用ng repeat,但我不确定如何将参数从视图传递到控制器。我通读了所有的指令,但我没有看到一个很好的匹配,这让我觉得我可能走错了路
这是一个简化的控制器:
$scope.facet_selections=[{name:"Collection", value: "collection_title", term: "collectionTitle"}, {name:"Series", value: "series_title", term: "seriesTitle"}, {name:"Episode", value: "episode_title", term: "episodeTitle"},];
$scope.frequency=Frequency.query({facet: facet}).then(function(data) {
$scope.topterms=data.facets[term].terms;
})
下面是html:
<div class="browse" ng-repeat="object in facet_selections" ng-init="var term={{object.term}}">
<h4> {{object.name}} </h4>
<ul>
<li ng-repeat="term in topterms"> {{term.term}} ({{term.count}})</li>
</ul>
</div>
{{object.name}
- {{term.term}}({{term.count})
问题在于无法将html绑定到承诺。您必须等待承诺得到解决,然后更新范围。因此,我将在控制器中处理初始循环,而不是使用ng repeat
$scope.facet_selections=[{name:"Collection", value: "collection_title", term: "collectionTitle"}, {name:"Series", value: "series_title", term: "seriesTitle"}, {name:"Episode", value: "episode_title", term: "episodeTitle"},];
for(var i; i < $scope.facet_selections.length; i++){
var selection = $scope.facet_selections[i];
Frequency.query({facet: selection.value}).then(function(data) {
$scope.facet_selections[i].results = data.facets[selection.term].terms;
$scope.$digest() // hook into the angular binding system
});
}
然后
{{num}}{{getTimesTwo(num)}}
将导致
<div ng-repeat="num in numbers">
0 <span>0</span>
</div>
<div ng-repeat="num in numbers">
4 <span>8</span>
</div>
<div ng-repeat="num in numbers">
5 <span>10</span>
</div>
<div ng-repeat="num in numbers">
2 <span>4</span>
</div>
0 0
4 8
5 10
2 4
只是这不是你真正的问题,它的承诺解决方案与
$digest
循环挂钩你想传递什么参数?我正试图将facet
(facet\u selections.value)和term
(facet\u selections.term)传递到$scope.frequency中。谢谢,这真的很有帮助,我认为这已经接近成功了。$scope.facet_selections[i].results
应该如何工作?我认为您可能指的是$scope.facet\u选择[I].value.results
,这样它就创建了一个新的范围,如$scope.collection\u title.results
,但这似乎不起作用。使用$scope.facet\u选择[I].results
我只是随意将结果附加到$scope.facet\u选项中,以使我的生活更轻松<代码>值。结果也可以。我不知道什么是$scope.collection\u title
,所以我不能对此发表评论。如果你觉得这很有帮助,那就进行一次升级投票吧?显然我还没有足够的积分来升级投票,但我很乐意在整理好后进行绿色检查。我正在返回结果,但它们都是针对facet\u选择中的最终对象的。看起来我可能需要给它们唯一的变量名。当然,唯一的变量将是实现这一点的另一种方式。更新后,我将Freshyeball的建议与匿名函数()结合起来,以实现这一点。
$scope.numbers = [0, 4, 5, 2];
$scope.getTimesTwo = function(num){
return num * 2;
};
<div ng-repeat="num in numbers">
{{num}} <span>{{getTimesTwo(num)}}</span>
</div>
<div ng-repeat="num in numbers">
0 <span>0</span>
</div>
<div ng-repeat="num in numbers">
4 <span>8</span>
</div>
<div ng-repeat="num in numbers">
5 <span>10</span>
</div>
<div ng-repeat="num in numbers">
2 <span>4</span>
</div>