我正在尝试创建一个可能被多个应用程序使用的模块。我在这里看到了几个关于这个问题的问题,并不是一个真正的标准方法。就我的目的而言,模块似乎是最好的选择。
我将模块注入我想要使用它的控制器,但我似乎无法在模块上公开方法。这是模块中的相关代码:
(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});
}
})(角度);
当我在我的一个控制器中运行一个方法时,我可以在调试器中看到oDataHelpers,但是没有一个方法,当然,当我尝试调用其中一个方法时,我收到一个错误,指示该方法是不是一个功能。我错过了什么?
答案 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);
答案 1 :(得分:0)
我认为我发布了我最终做的相关部分,因为我还没有真正看到其他地方似乎坚持当前最佳实践的解决方案。这主要基于@ tcooc的答案以及Ben Nadel在此处发现的博客文章:
(function(ng){ "使用严格的&#34 ;;
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);
这对我来说非常合适,并且没有引用我应用的其他部分,所以我可以在其他地方自由使用它。
答案 2 :(得分:-1)
首先,我将此设置为服务或工厂,但无论如何都应该有效。
return
是错误的...你在一个无效的对象中有重复的属性名称,但是当需要返回的对象已被定义为{{{}时,你不需要返回该对象1}}
尝试:
module
与
相同return module;
至于创建一个可移植性的角度模块......这就是模块化的全部意义所在!