为什么我的AngularJS视图没有得到更新与Parse.com JavaScript SDK AJAX调用后
Why my AngularJS view is not getting updated after AJAX call with Parse.com JavaScript SDK?
这是我的视图
<div ng-repeat="blog in blogs">
<h3>{{blog.title}}</h3>
<h4>{{blog.post}}</h4>
</div>
My Controller Code:
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);
完美地显示返回的数据。只是在获取这个值后视图没有更新
回调中的代码在" Angular的世界之外"执行,这意味着$digest循环不会被触发,更改也不会反映在DOM中。
你需要使用$apply:
$apply()用于从外部执行angular中的表达式角框架。(例如,从浏览器DOM事件,setTimeout, XHR或第三方库)。因为我们正在呼叫angular框架需要执行合适的作用域生命周期异常处理,执行手表。
在您的服务中注入$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);
});
},
你的"success"回调是异步执行的,angular不知道它什么时候发生。要通知angular成功的回调,你可以把它包装在$scope.$apply
success: function(results) {
$scope.$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);
});
}
让您的服务返回承诺!
<>之前.factory('factoryReturningPromise', function (){...返回query.find ()不要犹豫(函数(结果){...//确保返回值是一个已解析的promise返回Parse.Promise.as(博客);},函数(错误){//我们在这里是因为查询错误-返回被拒绝的承诺返回Parse.Promise.error(错误);});})之前然后您只需要将其封装到控制器内的本地$scope.$apply
中:
这样,只有包含所有表的局部摘要循环才会被检查。
相关文章:
- http://oauth.googlecode.com/svn/code/javascript/oauth.js已关闭,
- 如何使用Parse.com JavaScript SDK上传图像
- Roles - Parse.com Javascript
- 使用 JavaScript Regex 将“First.Last@example.com”变成“flast”
- 为什么Coderbyte.com's的Javascript模板喜欢返回函数的原始参数
- 是否有使用Javascript的Parse.com下拉选项
- 我的regex可以在regex101.com沙箱中工作,但不能在实际的javascript中工作
- 如何使用Meteor.com检测JavaScript是否被禁用
- parse.com javascript地理查询api中的withinFile错误
- 我试图从这个网站获得标题(http://www.itslaw.com),它是通过JavaScript加载的
- Parse.com-在JavaScript SDK中模板化集合时检索图像URL
- 用javascript在getmoju.com等移动轮调上更改图像
- Javascript/jQuery:确定给定URL的域:“youtube.com”或“vimeo.com”
- 如何使用带有Autohotkey的COM访问Javascript数组
- 当前用户在 parse.com [JavaScript]
- 所有的javascript都 ajax.aspnetcdn.com/ajax/ 坏了?打破所有外部引用?自周五以来
- parse.com - 我如何仅使用 javascript 创建等于 createdAt 日期的查询
- Parse.com 日期问题使用javascript
- 如何使用 javascript for http request 使用 .com url.
- 使用 javascript 将文件上传到 parse.com