0

我编写了一个小型 Angular1 应用程序,它有一个使用 LokiJS 的数据库服务。我想知道是否有办法将属性/函数动态添加到服务/工厂。

我正在尝试为通过此服务创建的每个集合添加动态 getter。

这是我的例子:

数据库.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
        };
      }
    ]
  );

应用程序.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()

        }]);;

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

4

1 回答 1

1

最合适的地方是decorator

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

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

            ...

            return Database;
    }]);

配方与块并没有真正的不同run,但它保证服务将在注入时初始化,而run块取决于它们的顺序。

于 2016-06-25T18:37:27.810 回答