Thi*_*zar 1 service angularjs parse-platform
我将用一个简单的例子来解释我的问题.
Parse.initialize("nlxy5xYYZQ1fLfFkzcyLHOifkie1dOU0ZSxoxw1w", "IRBJO7nyd1vQquhMvnyMd298ZVJ0qWg1AjxBY5nr");
var People = Parse.Object.extend("People");
var app = angular.module('app', []);
app.controller("MyCtrl", ["$scope", "PeopleService", function($scope, PeopleService){
$scope.people = PeopleService.getPeople();
}]);
app.service("PeopleService", function(){
var people = null;
return {
getPeople: function(){
people = [];
var queryObject = new Parse.Query(People);
queryObject.find({
success: function (results) {
for (var i = 0; i < results.length; i++) {
var result = results[i];
people.push(result.get("name"));
}
return people;
},
error: function (error) {
console.error("Error: " + error.code + " " + error.message);
}
});
}
}
});
Run Code Online (Sandbox Code Playgroud)
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js">
</script>
<script src="https://www.parsecdn.com/js/parse-1.3.2.min.js"></script>
<div ng-app="app">
<ul ng-controller="MyCtrl">
<li ng-repeat="person in people">{{person}}</li>
</ul>
</div>
Run Code Online (Sandbox Code Playgroud)
当然,现在,当Parse返回数据时,控制器中的范围不会更新.如何使此服务正常运行?
小智 5
正如@james之前所说,使用$ q服务中的promises是你正在寻找的.这是你的例子.
getPeople: function(){
var deferred = $q.defer();
people = [];
var queryObject = new Parse.Query(People);
queryObject.find({
success: function (results) {
for (var i = 0; i < results.length; i++) {
var result = results[i];
people.push(result.get("name"));
}
deferred.resolve(people);
},
error: function (error) {
deferred.reject(error);
}
});
return deferred.promise;
}
Run Code Online (Sandbox Code Playgroud)
这将返回一个您可以像这样使用的承诺
$scope.people = PeopleService.getPeople();
Run Code Online (Sandbox Code Playgroud)
要么
$scope.people = PeopleService.getPeople()
.then(function(people) {
//modify data as necessary
return people
}, function(reason) {
alert('Failed: ' + reason);
}
);
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1270 次 |
最近记录: |