【问题标题】:Returning function from AngularJS factory从 AngularJS 工厂返回函数
【发布时间】:2014-01-19 22:26:04
【问题描述】:

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

});

【问题讨论】:

标签: javascript angularjs


【解决方案1】:

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函数的引用,并将它附加到返回的单例对象内的属性getMessages

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

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

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

【讨论】:

    【解决方案2】:

    也可以先声明一个空对象,然后在对象中添加函数
    最后返回对象。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-03-23
      • 1970-01-01
      • 2016-01-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多