Javascript 在AngularJS中的ng repeat中执行函数
我想在ng repeat中执行一个函数,以检索要显示的其他数据 例如,我有一份公寓清单。我使用Javascript 在AngularJS中的ng repeat中执行函数,javascript,angularjs,Javascript,Angularjs,我想在ng repeat中执行一个函数,以检索要显示的其他数据 例如,我有一份公寓清单。我使用ng:repeat显示此列表,而不是针对我想向所有者显示的每个公寓,这不是u.Apartments。因此,我的getInq函数调用一个服务来获取指定公寓的所有者。这对我来说似乎是合乎逻辑的,但它不起作用。 它返回“已达到10$digest()迭代。正在中止!”错误 我有以下代码: <div ng:repeat="u in units"> <div ng:repe
ng:repeat
显示此列表,而不是针对我想向所有者显示的每个公寓,这不是u.Apartments
。因此,我的getInq
函数调用一个服务来获取指定公寓的所有者。这对我来说似乎是合乎逻辑的,但它不起作用。
它返回“已达到10$digest()迭代。正在中止!”
错误
我有以下代码:
<div ng:repeat="u in units">
<div ng:repeat="a in u.Apartments">
<div class="targhetta" style="margin-top:10px">{{a.Name}}</div>
<br />{{getInq(a.ApartmentId)}}
<table>
<tr ng:repeat="cs in a.CS">
<td>{{cs.Position}}</td>
<td>{{cs.Code}}</td>
</tr>
</table>
</div>
</div>
有什么建议吗?不要在html中使用{{getInq(a.ApartmentId)}
。它将生成大量的http请求,这就是为什么会出现错误
相反,为控制器中需要的每个项目调用此函数,并将其添加到
$scope.units
变量的正确位置。这只会导致足够的http请求,一旦有了这些请求,就会停止运行更多的http请求。您应该在想要从ng repeat获得的任何数据中创建一个自定义指令,并执行任何想要的操作。该指令将在每个ng repeat循环上启动其链接功能
var-app=angular.module('myApp',[])
.controller('myCtrl',函数($scope){
$scope.data=['a','b','c'];
})
.directive('myDirective',function(){
返回{
限制:“A”,
模板:{{myDirective}}',//其中myDirective绑定到scope.myDirective
范围:{
myDirective:“=”
},
链接:函数(范围、元素、属性){
log('Do action with data',scope.myDirective);
}
};
});代码>
- {{item}
发生此错误的原因是:
getInq返回$scope.nomeCognome和$scope.nomeCognome更改每次ng重复迭代集合时,每次更改都会触发$digest循环,这将导致可怕的结果。您应该避免这样做,因为这样会使$digest变得非常复杂。角度指令用于操作双向数据绑定,您不应该调用这些方法,正如您在两个ng重复中特别指出的那样,它们基本上是循环,这也会降低页面加载速度。您应该为控制器内的数据绑定正确创建JSON。下面应该是您的HTML代码:
<div ng:repeat="u in units">
<div ng:repeat="a in u.Apartments">
<div class="targhetta" style="margin-top:10px">{{a.Name}}/div>
<table>
<tr ng:repeat="cs in a.CS">
<td>{{cs.Position}}</td>
<td>{{cs.Code}}</td>
</tr>
</table>
</div>
</div>
像这样的
for( var i=0; i<u.Apartment.length;i++)
{
u.Apartment[i].cs=$scope.getInq(u.Apartment[i].Id);
}
用于(var i=0;iYou应该创建一个自定义指令,传入您想要从ng repeat获得的任何数据,并执行您想要的任何操作。该指令将在每个ng repeat循环上启动其链接函数。您不能将http请求作为函数返回,因为当该函数被称为hanks@Synapse时,它不存在。myDirective.Ho中有值我更新了上面的示例,向您展示了如何在模板内部访问传递的数据
units=[
{ u.Appartment:[{a.cs[value1,value2]},{},{}]},{},{}]
for( var i=0; i<u.Apartment.length;i++)
{
u.Apartment[i].cs=$scope.getInq(u.Apartment[i].Id);
}