我写了一个小的Angular1应用程序,它有一个使用LokiJS的数据库服务。 我想知道是否有办法动态地向服务/工厂添加属性/功能。
我试图为通过此服务创建的每个集合添加动态getter。
这是我的例子:
Database.js
angular.module('MyApp')
.factory('Database', ['$log', '$q', 'Loki',
function Database($log, $q, Loki)
{
var _db,
dbInitialized = false;
function init(config)
{
// some logic here
}
function addCollection(name, cfg) {
// some logic here
_db.addCollection(name, cfg);
// this doesnt work, but is desired ->
/*this['get'+name] = this.getCollection.bind(this, name);*/
}
function getCollection(collectionName) {
// some logic here
return something;
}
return {
init: init,
addCollection: addCollection,
getCollection: getCollection
};
}
]
);
app.js
angular
.module('MyApp', ['lokijs'])
.run(['Database',
function (Database) {
Database.init();
Database.addCollection("MyCollection", {});
// then fill collection, afterwards ->
var collection = Database.getCollection("MyCollection");
// I would like to use Database.getMyCollection()
}]);;
有没有办法修改已初始化的服务/工厂?
答案 0 :(得分:1)
最适合的地方是装饰师
app.decorator('Database', ['$delegate', function ($delegate) {
var Database = $delegate;
Database.init();
Database.addCollection("MyCollection", {});
...
return Database;
}]);
配方与run
块没有什么不同,但它保证服务将在注入时初始化,而run
块依赖于它们的顺序。