Angularjs 如何使用ngRepeat将变量从视图传递到作用域

Angularjs 如何使用ngRepeat将变量从视图传递到作用域,angularjs,angularjs-scope,Angularjs,Angularjs Scope,我正在制作一个浏览页面,用户可以在其中看到我的网站搜索方面的顶级术语(我使用的是ElasticSearch/Tire)。我创建了一个对象数组,其中包含搜索所需格式的标题和参数。我希望遍历数组并显示标题,然后显示搜索每个方面的结果。起初,我尝试在控制器中使用for循环来迭代facet\u选择,但这看起来不像是有角度的方式。所以现在我尝试在迭代中使用ng repeat,但我不确定如何将参数从视图传递到控制器。我通读了所有的指令,但我没有看到一个很好的匹配,这让我觉得我可能走错了路 这是一个简化的控制

我正在制作一个浏览页面,用户可以在其中看到我的网站搜索方面的顶级术语(我使用的是ElasticSearch/Tire)。我创建了一个对象数组,其中包含搜索所需格式的标题和参数。我希望遍历数组并显示标题,然后显示搜索每个方面的结果。起初,我尝试在控制器中使用for循环来迭代
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>