何时$on加载需要 AngularJS 应用程序

When is $on loaded needed in an AngularJS app?

本文关键字:AngularJS 应用程序 加载 on 何时      更新时间:2023-09-26

我正在遵循这个角度教程,并对$on("loaded",...(调用感到困惑。

$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", ...(?

第一个:

$scope.user.$on("loaded",...

将在加载 $scope.user 时触发,第二个:

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

加载给定帖子时,将为每个帖子触发。

Angular(主要是javascript(异步进行网络调用,所以如果你想对它们的结果进行后处理,你必须定义一个回调,在加载它们时将被调用。

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

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