【发布时间】:2013-06-20 22:48:08
【问题描述】:
我正在寻找一种在将更改添加到 $scope 变量(在本例中为 $scope.results)后执行代码的方法。我需要这样做是为了调用一些要求项目在 DOM 中才能执行的遗留代码。
我的真实代码是触发 AJAX 调用,并更新范围变量以更新 ui。所以我目前我的代码在我推送到范围后立即执行,但是由于 dom 元素尚不可用,遗留代码失败了。
我可以用 setTimeout() 添加一个难看的延迟,但这并不能保证 DOM 真的准备好了。
我的问题是,有什么方法可以绑定到类似“渲染”的事件?
var myApp = angular.module('myApp', []);
myApp.controller("myController", ['$scope', function($scope){
var resultsToLoad = [{id: 1, name: "one"},{id: 2, name: "two"},{id: 3, name: "three"}];
$scope.results = [];
$scope.loadResults = function(){
for(var i=0; i < resultsToLoad.length; i++){
$scope.results.push(resultsToLoad[i]);
}
}
function doneAddingToDom(){
// do something awesome like trigger a service call to log
}
}]);
angular.bootstrap(document, ['myApp']);
模拟代码链接:http://jsfiddle.net/acolchado/BhApF/5/
提前致谢!
【问题讨论】:
-
如果你想使用 setTimeout() 为什么不试试 setInterval() 方法呢?以角度方式,有什么方法可以在代码中使用手表功能?
-
我想避免使用 setTimeout。我发现这个小提琴声称可以做我想做的事,但它不起作用。关键似乎是$evalAsync,所以我必须想办法让它工作。我希望我走在正确的道路上。
-
我面临着类似的问题,我的想法是使用承诺“做一些很棒的事情”,在将(最终)更新的范围变量上设置 $watch并解决 $watch 中的承诺。我还没有尝试过:刚刚进入 Angular。我很想看看你能不能让它工作!