首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Angular中从工厂调用属性

在Angular中从工厂调用属性
EN

Stack Overflow用户
提问于 2015-07-21 21:17:11
回答 1查看 97关注 0票数 0

实际上,我在从工厂检索数据时遇到了问题。

代码语言:javascript
复制
.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属性?我在工厂里做了另一种方法:

代码语言:javascript
复制
Spooler.prototype.getName =  function() {
    return this.name;
}

为什么我不能直接给spooler.name打电话?因为假脱机程序返回controller中的名称?

EN

回答 1

Stack Overflow用户

发布于 2015-07-21 21:24:48

假脱机程序不能只使用.name属性的原因是,在您的承诺得到解决之前,您的属性实际上是null。如果需要能够可靠地访问名称和其他属性,请在加载时使用.then函数或提供回调。

代码语言:javascript
复制
var myspooler = Spooler(1);

myspooler.load().then(function(data){
   ... do something with your data ...
});

代码语言:javascript
复制
myspooler.load(function(data){
  ... do something with your data ...
})

你的服务就变成了

代码语言:javascript
复制
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);
    });
};
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31540157

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档