使用AngularJS使用'delta-pouch'插件部分更新PouchDB文档

时间:2014-08-15 16:35:39

标签: angularjs pouchdb

我正在尝试让delta-pouch plugin与我的AngularJS应用上的PouchDB设置一起使用。

我在Angular的数据服务如下:

myApp.factory('DataService', ['$q', '$rootScope', 'PouchDB', function($q, $rootScope, PouchDB) {
  return {
    add: function(doc) {
      var deferred = $q.defer();
      PouchDB.post(doc, function(err, res) {
        $rootScope.$apply(function() {
          if (err) {
            deferred.reject(err)
          } else {
            deferred.resolve(res)
          }
        });
      });
      return deferred.promise;
    },

    list: function() {
      var deferred = $q.defer();
      return PouchDB.allDocs({include_docs: true, descending: true}, function(err, res) {
        $rootScope.$apply(function() {
          if (err) {
            deferred.reject(err)
          } else {
            deferred.resolve(res)
          }
        });
      });
      return deferred.promise;
    },

    update: function(obj) {
      var deferred = $q.defer();
        return PouchDB.save(obj, function(err, res) {
        $rootScope.$apply(function() {
          if (err) {
            deferred.reject(err)
          } else {
            deferred.resolve(res)
          }
        });
        });
     return deferred.promise;
    },

    get: function(id) {
        return PouchDB.get(id);
    },

    destroy: function() {
        PouchDB.destroy();
    }
  }
}]);

listadd工作正常,但调用save会返回以下错误。这是

Error: 'undefined' is not a constructor (evaluating 'new Promise(function (fulfill) {
    db.post(doc).then(function (doc) {
      fulfill(doc);
    });
  })')

说实话,我不完全确定我在做什么,因为我对Angular很新。任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:0)

你在哪里看到这个?在你的业力测试中(即PhantomJS)?看起来Promise未在浏览器中正确实现,这意味着您可能需要使用明确的Promise垫片,如this one

答案 1 :(得分:0)

我发布了一个名为factoryng的一体化angularjs绑定,您可以将其用于将delta包(或香草包)整合到角度代码中。我认为这将有助于您在deltajs代码中使用delta包。

此外,我建议您查看Contacts example,因为它涵盖了所有CRUD操作。如果您仍然遇到问题,请告诉我。