2015-10-08 224 views
0

我正在嘗試創建一個可能被多個應用程序使用的模塊。我在這裏看到了關於這個主題的幾個問題,似乎並沒有真正的標準方法。對我而言,模塊似乎是最好的選擇。創建自定義模塊

我注入我的模塊放到我的控制器,我想使用它,但我似乎無法揭露模塊上的方法。這是來自模塊的相關代碼:

(function (ng) { 
"use strict"; 
angular.module('oDataHelpers', []) 

angular.module('oDataHelpers').value("oDataHelpers", oDataHelpers) 


function oDataHelpers() { 
    var module = this; 
    module.getKeyFromURL = getKeyFromURL; 
    module.buildQueryString = buildQueryString; 

    // assumes the last value on a URL represents a key value 
    function getKeyFromURL() { 
     return "myString"; 
    }; 


    function buildQueryString(container, propertyList, operators, fieldList) { 
     return "my other string"; 
    }; 
    return ({module: getKeyFromURL, module: buildQueryString}); 
} 

})(angular);

當我在其中一個控制器中運行方法時,我可以在調試器中看到oDataHelpers,但沒有任何方法,當然,當我嘗試調用其中一種方法時,我收到一個錯誤,指示該方法不是一個功能。我錯過了什麼?

+0

有在最後一個額外的支架 - >'}})(角)'我想這有什麼用它做,但是我不敢自己糾正 –

回答

0

我想我會發布什麼,我終於實現了,因爲我還沒有看到其他地方的一個解決方案,似乎相關部分堅持目前的最佳實踐。這在很大程度上是基於@ tcooc的回答,也由本·納德爾博客條目在這裏找到:http://www.bennadel.com/blog/2472-hashkeycopier---an-angularjs-utility-class-for-merging-cached-and-live-data.htm

(函數(NG){ 「使用嚴格的」;

angular.module('oDataHelpers',[]).factory("oDataHelpers", oDataHelpers) 

function oDataHelpers() { 
    var module = this; 
    module.getKeyFromURL = getKeyFromURL; 
    module.buildQueryString = buildQueryString; 

    function getKeyFromURL() { 
     return "string" ; 
    }; 

    function buildQueryString(container, propertyList, operators, fieldList) { 
      return "my string" ; 
    }; 
    return module; 
} 

})(angular); 

這是工作完美的我和有我的應用程序的其它部分沒有提及,所以我可以自由地在其他地方使用它

-1

首先,我將它設置爲服務或工廠,但不管應該工作。

return是錯誤的...你有一個對象,它是無效的重複屬性的名稱,但你並不需要該對象返回時需要返還已定義爲module

嘗試對象:

return module; 

這將是相同的

return this; 

至於創造便攜的角度模塊...這就是模塊化的全部內容!

+0

我已經試過了,返回這個和返回模塊;我預計這兩項工作;兩者都沒有。 –

1

你會在正確的方向。首先,value提供了一個直接的價值,所以參考oDataHelpers將得到你的功能,而不是對象。你的模式實際上是factory

另一件事是,angular.module(name, [])定義一個模塊,而angular.module(name)負載的模塊。所以第二個angular.module呼叫是不必要的。

保持這些記(有一些額外的修正):

(function (angular) { 
"use strict"; 
angular.module('oDataHelpers', []).factory("oDataHelpers", function() { 
    var module = {}; 
    module.getKeyFromURL = getKeyFromURL; 
    module.buildQueryString = buildQueryString; 

    // assumes the last value on a URL represents a key value 
    function getKeyFromURL() { 
     return "myString"; 
    }; 

    function buildQueryString(container, propertyList, operators, fieldList) { 
     return "my other string"; 
    }; 
    return module; 
}); 
})(angular); 
+0

角度模塊聲明沒有錯...答案的部分似乎是誤導性的,因爲它是一個問題 – charlietfl

+0

@charlietfl澄清了聲明模塊和獲取模塊(以及第二個調用是不必要的)之間的區別。澄清的答案。 – tcooc

+0

是的......不必要的聲音更好 – charlietfl