AngularJS在方法之外访问$scope

AngularJS accessing $scope outside of method

本文关键字:访问 scope 方法 AngularJS      更新时间:2023-09-26

这是我在控制器中的方法,我想在下面给定的方法之外访问$scope.oldcats。在方法中使用console.info($scope.oldcats);,输出数据,但使用console.info($scope.oldcats);外部功能显示undefined

$scope.loadPost = function() { //Issues a GET request to /api/post/:id to get a Post to update
    $scope.posts = Post.get({ id:$stateParams.id}, function(response){
       $scope.posts = response.data;
       $scope.posts.selcats = response.data.categories;
       var cats = $scope.posts.categories;
       $.each(cats, function(arrayID,group) {
           $scope.allCats.push(group.id);
       });
       $scope.oldcats = $scope.allCats; // <- i want to access it
       console.info($scope.oldcats); // <- output displays data
   });
  };
  $scope.loadPost(); // Load a Post which can be edited on UI
  console.info($scope.oldcats); // <- output display undefined

你犯了几个错误,你应该使用承诺:

$scope.loadPost = function(){ //Issues a GET request to /api/post/:id to get a Post to update        
    $scope.posts = function(){
       var deferred = $q.defer();
       Post.get({ id:$stateParams.id}, function(response){
           $scope.posts = response.data;
           $scope.posts.selcats = response.data.categories;
           var cats = $scope.posts.categories;
           $.each(cats, function(arrayID,group) {
               $scope.allCats.push(group.id);
           });
           $scope.oldcats = $scope.allCats; // <- i want to access it
           deferred.resolve($scope.oldcats);
           console.info($scope.oldcats); // <- output displays data
    });
    return deferred.promise;
  };
  return $scope.posts;
};
$scope.loadPost()().then(function(res){
    console.info(res);
});

在 API 调用完成之前调用函数外部的console.info。因此,它会记录undefined .但是,在 API 调用完成后,将调用函数内的控制台。这称为异步行为。看看承诺

这个thinkster教程将有助于更好地理解异步行为:思考者理解承诺