簡體   English   中英

從AngularJS工廠返回功能

[英]Returning function from AngularJS factory

我試圖了解這個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
  };

});

factory是一個提供者構造函數:

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
 };

您還可以先聲明一個空對象,然后將函數添加到對象中
最后返回對象。

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

   return myobject;   
 });

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM