我正在关注this angular tutorial并且对$ on(“已加载”,...)调用感到困惑。
$scope.user.$on("loaded", function() {
populatePosts();
populatecomments();
});
...
function populatecomments() {
$scope.comments = {};
angular.forEach($scope.user.comments, function(comment) {
var post = Post.find(comment.postId);
post.$on("loaded", function() {
$scope.comments[comment.id] = post.$child("comments").$child(comment.id);
$scope.commentedPosts[comment.postId] = post;
});
});
}
为什么我们不能在这里调用populatePosts()和populatComments()?如果在加载之前没有调用它,为什么populatecomments()中需要第二个$ on(“loaded”,...)?
答案 0 :(得分:1)
第一个:
$scope.user.$on("loaded",...
加载$ scope.user时将触发,第二个:
post.$on("loaded",...
将在每个帖子被加载时触发。
Angular(主要是javascript)异步进行网络调用,因此如果要对结果进行后处理,则必须定义一个在加载时将被调用的回调。
如您所见populatecomments()
使用$scope.user.comments
,如果您直接在已加载的事件处理程序之外调用populatecomments()
,则{{1}}可能无法访问。
答案 1 :(得分:1)
在这种情况下,它不是。您可以(并且应该)重构此代码以改为使用promises。