这是我的看法
<div ng-repeat="blog in blogs">
<h3>{{blog.title}}</h3>
<h4>{{blog.post}}</h4>
</div>
我的 Controller 代码:
demoApp.controller('myController', ['$scope', 'blogService', function ($scope,
blogService)
{
$scope.blogs = blogService.getBlogs();
}]);
我在服务中的代码。这包括对 Parse.com javascript sdk 的异步调用。
this.getBlogs = function ()
{
var BlogPost = Parse.Object.extend("BlogPost");
var blogPost = new BlogPost();
var blogs = [];
var query = new Parse.Query(BlogPost);
query.find({
success: function(results) {
console.log(results[0].get("title"));
for (var i = 0; i < results.length; i++)
{
blogs.push(
{
title : results[i].get("title"),
post : results[i].get("post")
});
}
console.log(blogs);
},
error: function(error) {
alert("Error: " + error.code + " " + error.message);
}
});
return blogs;
}; });
控制台日志 console.log(blogs);
完美地显示了返回的数据。获取此值后,只是 View 不会更新。
最佳答案
回调中的代码在“Angular 世界之外”执行,这意味着 $digest 循环不会被触发,更改也不会反射(reflect)在 DOM 中。
您需要使用 $apply :
$apply() is used to execute an expression in angular from outside of the angular framework. (For example from browser DOM events, setTimeout, XHR or third party libraries). Because we are calling into the angular framework we need to perform proper scope life cycle of exception handling, executing watches.
在您的服务中注入(inject) $rootScope
,例如:
success: function(results) {
$rootScope.$apply(function () {
console.log(results[0].get("title"));
for (var i = 0; i < results.length; i++)
{
blogs.push(
{
title : results[i].get("title"),
post : results[i].get("post")
});
}
console.log(blogs);
});
},
关于javascript - 为什么我的 AngularJS View 在使用 Parse.com JavaScript SDK 进行 AJAX 调用后没有得到更新?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23412238/