何时在AngularJS应用程序中需要加载$?

时间:2014-06-03 21:58:28

标签: javascript angularjs

我正在关注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”,...)?

2 个答案:

答案 0 :(得分:1)

第一个:

$scope.user.$on("loaded",...
加载$ scope.user时将触发

,第二个:

post.$on("loaded",...

将在每个帖子被加载时触发

Angular(主要是javascript)异步进行网络调用,因此如果要对结果进行后处理,则必须定义一个在加载时将被调用的回调。

如您所见populatecomments()使用$scope.user.comments,如果您直接在已加载的事件处理程序之外调用populatecomments(),则{{1}}可能无法访问。

答案 1 :(得分:1)

在这种情况下,它不是。您可以(并且应该)重构此代码以改为使用promises