2014-01-19 122 views
6

返回功能我想了解的目的就是这个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 
    }; 

}); 
+0

[如何使用在JavaScript显露的模块模式](http://stackoverflow.com/questions/5647258/how-to-use-revealing-module-pattern-in-javascript) – Stewie

+0

感谢的可能重复,一个评论有联系[这里](http://www.addyosmani.com/resources/essentialjsdesignpatterns/book/#revealingmodulepatternjavascript)这是有帮助 – catrapture

回答

5

factoryprovider构造:

工厂(FN) - 注册服务工厂函数,FN,将被 包裹在一个服务提供者对象,其$获得属性将包含 给定的工厂功能。

因此,当工厂第一次被Angular加载时,它执行传入的函数并存储返回的函数作为提供者。

换言之,以下是自举过程中运行一次,且仅once-:

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

您也可以先声明一个空的对象,并添加功能到对象
最后返回的对象。

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

    return myobject; 
});