在ng-repeat div标签之间
我div.cover_container.fetched
个元素显示使用$http.get
我想在这些元素上附加事件处理程序,但我不能这样做,因为有时他们还没有完成加载。
负责附加事件处理程序的函数是activateGear
即使我将activateGear
放在成功部分内,activateGear
并不总是有效,因为在执行该功能时div.cover_container.fetched
不存在。
$http.get(url).success(function(data, status, headers, config) {
var items = data.stories;
this.maxLimit = data.paging.count;
for (var i = 0; i < items.length; i++) {
if (this.items.length < this.maxLimit) {
this.items.push(items[i]);
}
}
activateGear();
activateGear
是将事件处理程序附加到重复元素上的函数。
如何在angularjs 1.0.8中实现上述目标?
更新
我设法使用setInterval
作为解决方法来实现效果。
希望没有这样的解决方法,我得到了我想要的东西。
MyWorks.prototype.nextPage = function() {
if (this.busy) return;
this.busy = true;
var url = "/my_works?page=" + this.page + "&top=" + this.perPage + "&callback=JSON_CALLBACK";
$http.defaults.headers.get = { 'Accept' : 'application/json', 'Content-Type' : 'application/json' };
$http.get(url).success(function(data, status, headers, config) {
var items = data.stories;
this.maxLimit = data.paging.count;
for (var i = 0; i < items.length; i++) {
if (this.items.length < this.maxLimit) {
this.items.push(items[i]);
}
}
this.page = parseInt(this.items.length / this.perPage) + 1;
var currentMyWorks = this;
var theIntervalId = setInterval(function() {
if (currentMyWorks.busy == false) {
activateGear();
clearInterval(theIntervalId);
}
}, 300);
this.busy = false;
答案 0 :(得分:0)
最好的方法是让您分开关注点。
将视图转换为指令,您可以利用link
函数对已完成渲染的元素进行操作。
$http
是您在服务中使用的提供程序,因此不能用于DOM操作,如果您尝试在控制器中使用它,那就更糟糕了。
对于角度指令,文档阅读here和一个很好的学习资源:egghead.io