Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/413.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript ng repeat的列表源调用次数过多_Javascript_Angularjs - Fatal编程技术网

Javascript ng repeat的列表源调用次数过多

Javascript ng repeat的列表源调用次数过多,javascript,angularjs,Javascript,Angularjs,angular.module('NGTest')[ ]) .controller('ItemList',['$scope',函数($scope){ log(“ItemList控制器初始化”); var self=这个; self.count=4; self.getItems=函数(){ log(“ItemList.getItems()被调用”); 返回[]; } }]); 福 为什么两次 你需要仔细阅读角度摘要循环是如何工作的。每个周期将运行至少2个摘要,如果这些摘要中的范围发生变化,则会运

angular.module('NGTest')[
])
.controller('ItemList',['$scope',函数($scope){
log(“ItemList控制器初始化”);
var self=这个;
self.count=4;
self.getItems=函数(){
log(“ItemList.getItems()被调用”);
返回[];
}
}]);
为什么两次

你需要仔细阅读角度摘要循环是如何工作的。每个周期将运行至少2个摘要,如果这些摘要中的范围发生变化,则会运行更多

在视图中使用函数作为ng repeat的源不是一个好主意。在控制器中获取数据并作为范围数组传递给视图

self.items= getItems();   

function getItems(){
   console.log("ItemList.getItems() called");
   return [];
}
现在,当控制器初始化时,该函数将只被调用一次

看法

{{item}

I在我的实际应用程序中,ng repeat source中存在此函数的原因是此列表取决于同一控制器下表单控件的值。在ng repeat中使用
filter
并在需要时创建自定义筛选器这并不容易,列表是通过http从数据库中检索的。在客户端保留完整列表不是一个选项。好的,我删除了函数调用,并将源代码保留为控制器的简单属性。我现在通过过滤条件表单控件中的ng change指令来更新这个属性。听起来设置起来更好
<div ng-repeat="item in lst.items">{{item}}</div>