作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我是一个 ionic/Angular n00b,我不知道如何做到这一点。
我有一个这样定义的工厂:
angular.module('starter.services', [])
.factory('Calendars', function () {
var calendars;
var success = function(message) {
calendars = message;
return calendars;
};
var error = function(message) {alert("Error: " + message)};
window.plugins.calendar.listCalendars(success,error);
return {
all: function() {
return calendars;
},
get: function(calendarId) {
return calendars[calendarId];
}
}
});
我正在尝试像这样在我的 Controller 中检索日历:
.controller('CalendarsCtrl', function($scope,Calendars) {
$scope.calendars = Calendars.all();
})
正在调用工厂方法,但在调用“成功”回调之前结果不可用,因此 CalendarsCtrl 始终未定义。
如何解决?
编辑 - 我已经更正了 Controller 中的调用。但同样的问题仍然存在,该函数在成功回调之前不会返回结果。
最佳答案
你将不得不使用一个 promise 。
先添加依赖$q
.factory('Calendars', function ($q) {
然后在 all() 中你这样做
all: function() {
var deferred = $q.defer();
window.plugins.calendar.listCalendars(function(data) {
deferred.resolve(data);
}
,function(error) {
deferred.reject(error); // something went wrong here
});
return deferred.promise;
现在这将使返回之后数据已被解析(不再是未定义的)。
最后一件事,现在当您从 Controller 取回数据时,您可以执行此操作
var promise = Calendars.all();
promise.then(function(data) {
console.log('Success: you can use your calendar data now');
}, function(error) {
console.log('Failed for some reason:' + error);
});
您可以在这里阅读更多关于 promise 的信息:https://docs.angularjs.org/api/ng/service/ $q
我知道第一次很难掌握。
关于javascript - 如何在 Angular 的工厂方法中返回数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26656467/
我是一名优秀的程序员,十分优秀!