AngularJS绑定发生后运行函数

时间:2014-06-12 01:16:18

标签: angularjs

我有一个简单的应用程序,它使用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后调用它?

1 个答案:

答案 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;,所以使用这个技巧不会影响性能。