Javascript AngularJS在方法之外访问$scope
这是我在控制器中的方法,我想在下面给定的方法之外访问$scope.oldcats。 使用Javascript AngularJS在方法之外访问$scope,javascript,angularjs,Javascript,Angularjs,这是我在控制器中的方法,我想在下面给定的方法之外访问$scope.oldcats。 使用console.info($scope.oldcats)方法内部,输出数据, 但是使用console.info($scope.oldcats)外部功能显示未定义 $scope.loadPost = function() { //Issues a GET request to /api/post/:id to get a Post to update $scope.posts = Post.get({
console.info($scope.oldcats)代码>方法内部,输出数据,
但是使用console.info($scope.oldcats)代码>外部功能显示未定义
$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(){//向/api/post/:id发出GET请求以获取要更新的帖子
$scope.posts=Post.get({id:$stateParams.id},函数(响应){
$scope.posts=response.data;
$scope.posts.selcats=response.data.categories;
var cats=$scope.posts.categories;
$。每个(猫,功能(阵列ID,组){
$scope.allCats.push(group.id);
});
$scope.oldcats=$scope.allCats;//函数外部的console.info
在API调用完成之前被调用。因此它记录未定义的。但函数内部的控制台在API调用完成之后被调用。
这称为异步行为。
看看
本thinkster
教程将有助于更好地理解异步行为:您犯了几个错误,应该使用承诺:
$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);
});
$scope.loadPost=function(){//向/api/post/:id发出GET请求以获取要更新的帖子
$scope.posts=函数(){
var deferred=$q.deferred();
get({id:$stateParams.id},函数(响应){
$scope.posts=response.data;
$scope.posts.selcats=response.data.categories;
var cats=$scope.posts.categories;
$。每个(猫,功能(阵列ID,组){
$scope.allCats.push(group.id);
});
$scope.oldcats=$scope.allCats;//using console.log的可能副本也显示undefined..和$scope变量没有数据您使用的任何东西都将显示未定义,因为API调用尚未完成。我们如何在方法之外访问$scope.oldcats变量?您可以用与现在相同的方式访问它,但您将使用它我们必须等待api调用完成。为此,您需要承诺,在调用完成后将通知您。我想在函数外部将'res'数据分配给'$scope.selectedCategory'。您可以这样做$scope.selectedCategory=res;
而不是console.info(res);
,因为$scope
是控制器内部的全局对象。这是唯一的方法。在这种情况下,你不能只写$scope.selectedCategory=$scope.loadPost();
。或者我不明白,你说的“函数外部”是什么意思,这个函数是什么(loadPost,posts或其他)?我的语言不好,对不起…我是说在“$scope.loadPost()()”之外访问$scope.selectedCategory。然后(函数(res){$scope.selectedCategory=res;}”);“它显示未定义。在上次构造中检查它是否未定义?我创建了simple(Post.get我在$interval服务上通过means模拟),我想它会对您有所帮助。”。