2013-07-27 16 views
0

我在控制器中执行以下代码:如何在角js完成从服务器检索数据(并更新dom)时运行自定义js函数?

ViewCtrl.resolve = { 
    /** 
    * Fetching a user model from the backend to make it available to this controller. 
    */ 
    user: ['$http', 'symfony2Router', function($http, symfony2Router) { 
     return $http.get(symfony2Router.path('getUser')).then(function(response) { 
      return response.data; 
     }); 
    }] 
}; 

和下面的HTML模板:

<span data-ng-repeat="item in user.articles"> 
    {{ item.title }} 
</span> 

的问题是 - 我怎么可以运行一段JS代码,在DOM后才被angularjs改变了,现在用户拥有每篇文章的跨度?

回答

0

如果你想反应只有特定的插值改变(在你的情况,user.articles),你可以在你的控制器设置$监视监听它:

$watch('user.articles.length', valueChanged); 

如果你想运行一些只有DOM后,代码被更改:

var timeout; 

function valueChanged() { 
    if (!timeout) { 
    // only run doStuffWhenDOMChanged when the $digest loop is finished and call stack is empty: 
    timeout = $timeout(doStuffWhenDOMChanged, 10); 
    } 
} 

function doStuffWhenDOMChanged() { 
    //do stuff here... 
    timeout = null; 
} 
0

应用您$timeout来包装你piece of js code。然后代码将被延迟到下一轮执行。那时候,DOM已经更新了。

相关问题