2015-07-21 1 views
0

У меня на самом деле возникают проблемы с получением данных с моего завода.Вызов атрибута с завода в Angular

.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), который возвращает шпульницу (я могу прочитать доброе имя я NThe журналы контроллера). Мой вопрос: как я могу получить доступ к атрибуту name? Я сделал еще один метод на заводе:

Spooler.prototype.getName = function() { 
    return this.name; 
} 

Почему я не могу просто позвонить spooler.name? поскольку спулер возвращает имя в controller?

+1

Ваш завод более похож сервис. – Ved

ответ

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); 
    }); 
}; 
+0

Большое спасибо за ваш ответ. Означает ли это, что я должен использовать then() после вызова spooler.load()? –

+0

добавлено, как реализовать. – mikeswright49

Смежные вопросы