我实际上遇到了从工厂检索数据的问题。
.factory('Spooler', ['$http', '$q', '$log', 'Domains', function ($http, $q, $log, Domains) {
var Spooler = function (id) {
this.id = id;
this.name = null;
};
Spooler.prototype.load = function () {
var self = this;
var deferred = $q.defer();
$http.post('/spooler/' + this.id + '/load')
.success(function(data) {
self.name = data.name;
deferred.resolve(self);
})
.error(function(err, code) {
deferred.reject(err);
$log.error(err, code);
});
return deferred.promise;
};
这设置工厂,所以我可以调用:var spooler = new Spooler(1)
,它返回假脱机程序(我可以读取控制器日志中的好名字)。我的问题是:我怎样才能访问name属性?我在工厂做了另一种方法:
Spooler.prototype.getName = function() {
return this.name;
}
为什么我不能拨打spooler.name
?假脱机程序返回controller
中的名称?
答案 0 :(得分:0)
您的假脱机程序不能只使用.name属性的原因是因为您的属性实际上是null
,直到您的承诺得到解决。如果您需要能够可靠地访问名称和其他属性,请在加载时使用.then函数或提供回调。
var myspooler = Spooler(1);
myspooler.load().then(function(data){
... do something with your data ...
});
或
myspooler.load(function(data){
... do something with your data ...
})
,您的服务变为
Spooler.prototype.load = function (callback) {
var self = this;
var post = $http.post('/spooler/' + this.id + '/load')
.success(function(data) {
self.name = data.name;
callback(data);
})
.error(function(err, code) {
callback(err);
$log.error(err, code);
});
};