gpt4 book ai didi

javascript - 动态地将属性/功能添加到服务/工厂

转载 作者:行者123 更新时间:2023-12-03 06:39:25 25 4
gpt4 key购买 nike

我编写了一个小型 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()

}]);;

有没有办法修改初始化的服务/工厂?

最佳答案

最合适的地方是装饰器

  app.decorator('Database', ['$delegate', function ($delegate) {
var Database = $delegate;
Database.init();

Database.addCollection("MyCollection", {});

...

return Database;
}]);

该配方与 run block 并没有真正的区别,但它保证服务将在注入(inject)时初始化,而 run block 取决于它们的顺序。

关于javascript - 动态地将属性/功能添加到服务/工厂,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38031535/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com