Javascript 从AngularJS工厂返回函数

Javascript 从AngularJS工厂返回函数,javascript,angularjs,Javascript,Angularjs,我试图理解这个AngularJS工厂方法的返回部分的目的是什么 return { getMessages: getMessages }; 如果我们向这个工厂添加了一个名为getAnotherMessage()的新方法,我们需要更新这个返回段吗 myModule.factory('HelloWorld', function($q, $timeout) { var getMessages = function() { var deferred = $q.defer();

我试图理解这个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
  };

});
工厂
是一个构造函数:

工厂(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函数(以及返回对象中的任何其他属性)的对象

因此,是的,如果要将另一个属性(如函数)与提供程序(由工厂构造)关联,则需要将其作为返回的singleton对象的属性包含:

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

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

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

   return myobject;   
 });

可能重复的感谢,其中一个评论链接了这是有益的