2014-01-19 168 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; 
});