实际上,我在从工厂检索数据时遇到了问题。
.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中的名称?
发布于 2015-07-21 21:24:48
假脱机程序不能只使用.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);
});
};https://stackoverflow.com/questions/31540157
复制相似问题