我有一个简单的应用程序,它使用Angular运行HTTP GET请求,然后使用ng-repeat
将返回的数据设置为绑定到DOM的数组,我想运行一些操作此DOM的代码它被放入body
。使这项工作的最佳方法是什么?
$http({
method: 'GET',
url: 'https://www.*******.com/WebApi/Alert/Items/all',
cache: false
})
.success(function (data, status) {
$scope.alerts = data.result.Alerts;
jQuery('.aWidget').iconalt(); // THIS IS THE CODE I WANT TO RUN
})
.error(function (data, status) {
console.log(data);
alert("error");
});
请参阅,我想在将所有DOM放入文档后运行行jQuery('.aWidget').iconalt()
。现在,这条线的执行速度太快,所以它认为" DOM中没有.aWidget
个元素
是否有某种回调我可以注入AngularJS,在加载DOM后调用它?
答案 0 :(得分:1)
您正在遇到摘要周期,在您的代码返回之前,摘要周期尚未完成。所以你真正需要的是返回,然后运行一段代码。这是一个常见的JavaScript技巧:
// I used Angular's $timeout, but you can use setTimeout() just as easily...
$timeout(function() {
jQuery('.aWidget').iconalt();
}, 50);
还有一个名为setImmediate.js的非常酷的模块,可以填充" setImmediate"现代浏览器中的功能。经常使用这个技巧,浏览器制造商意识到这是他们应该提供快速,正确的#34;表演方式。您的代码可能不需要运行超过50毫秒 - 用户永远不会注意到......但如果您正在做一些DID,您可以使用此工具在"下一个tick&上运行任务#34;,所以使用这个技巧不会影响性能。