从AngularJS工厂返回功能

时间:2014-01-19 22:26:05

标签: javascript angularjs

我试图理解这个AngularJS工厂方法的返回部分的目的是什么意思?

return {
    getMessages: getMessages
  };

如果我们向此工厂添加一个名为getAnotherMessage()的新方法会发生什么情况,我们是否需要更新此返回段?

myModule.factory('HelloWorld', function($q, $timeout) {

  var getMessages = function() {
    var deferred = $q.defer();

    $timeout(function() {
      deferred.resolve(['Hello', 'world!']);
    }, 2000);

    return deferred.promise;
  };

  return {
    getMessages: getMessages
  };

});

2 个答案:

答案 0 :(得分:5)

factoryprovider构造函数:

  

factory(fn) - 注册一个服务工厂函数fn   包装在服务提供者对象中,其$ get属性将包含   给定的工厂功能。

因此,当Angular首次加载工厂时,它会执行传入的函数并存储作为提供程序返回的任何内容。

换句话说,以下是在引导过程中运行一次,并且只运行一次:

var getMessages = function() {
   var deferred = $q.defer();

   $timeout(function() {
      deferred.resolve(['Hello', 'world!']);
   }, 2000);

   return deferred.promise;
 };

return {
   getMessages: getMessages
 };

以上内容获取对getMessage函数的引用,并将其附加到返回的singleton对象中的属性getMessages

当提供程序被注入到您的代码中时,返回的对象就是传递的内容,使您可以访问HelloWorld.getMessages函数(以及返回对象中的任何其他属性)。

所以,是的,如果你想将另一个属性(如函数)与提供者(工厂构造)相关联,则需要将它作为返回的单例对象的属性包含在内:

return {
   getAnotherMessage: function() { ... },
   getMessages: getMessages
 };

答案 1 :(得分:1)

您还可以先声明一个空对象,然后将函数添加到对象中 最后返回对象。

 myModule.factory('HelloWorld', function($q, $timeout) {   
   var myobject = {};   
   myobject.getMessages = function() {    ...   };   
   myobject.getAnotherMessages = function() {    ...   };

   return myobject;   
 });