Javascript 在AngularJS中的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中执行一个函数,以检索要显示的其他数据

例如,我有一份公寓清单。我使用
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);
}