我有一个为我创建课程的单身人士。每个类都在一个单独的文件中。
// singleton.js
angular.module('mymodule')
.service('singleton', SingletonClass)
// someclass1.js, someclass2.js, ...
// Multiple files with same layout. Each web page has different # of these files.
// Therefore, it's hard to inject them statically
// (ie, via aggregator service/factory).
angular.module('mymodule')
.??('someClass', function(singleton) {
classOptions = {}; // details here
// creates a class with options and adds it to `singleton`s cache
singleton.addClass(classOptions);
})
// yet another file
angular.module('mymodule')
.controller('myController', function(singleton) {
singleton.getClasses(); // gets all classes added by #addClass method
});
基本上,我希望每个单独的“类”都可以自己包含在自己的文件中,类似于模块的自包含。这意味着我不希望想要singleton
或任何聚合器服务/工厂知道这些类在其创建中是否存在。
修改
我想澄清一下:我正在使用singleton
而不是单独注入创建的类,因为我还不知道将创建哪些类。该网页将动态加载某些js文件。每个文件都将注入单例对象并使用addClass
方法创建一个新类并将其存储在singleton
对象本身中。使用singleton.getClasses()
的控制器不会知道它有多少或哪些类,但它们有一个统一的接口,允许它以可预测的方式使用它们。
答案 0 :(得分:1)
你可以尝试为每个课程设置提供者(根据我上面的评论),尽管看起来如此。 。 。耗时的。也许你只是不需要它?使每个类成为闭包中的单独文件(就像你需要使用jquery一样),并从注入器中获取单例对象:
// file 1 - Add other files for other classes.
;(function(window, $) {
$(function() {
var classOptions = {};
$('body').injector().get('singleton').addClass(classOptions);
});
})(window, jQuery);
这不完全是棱角分明的方式,角度纯粹主义者会呼唤你的头脑,但我认为如果你不想让提供者感到困惑,它会实现你所追求的目标。