Javascript 角度:将控制器更改为工厂

Javascript 角度:将控制器更改为工厂,javascript,angularjs,mongodb,Javascript,Angularjs,Mongodb,使用下面的代码,我无法将对象返回到工厂中的返回值,并且随后在html中有空白字段,并且有角度错误 提供程序“theService”必须从$get factory方法返回一个值 我正在使用TingoDB(Mongo的javascript版本)和Angular开发一个单页应用程序,用于节点Webkit中的数据绑定 我可以从控制器中查询数据库,以显示、过滤网页的数据等,但希望将此代码更改为角度工厂,以便我可以跨多个控制器进行同步。 虽然我能够使用虚拟数据从工厂返回数据到控制器,但我无法从数据库返回“实

使用下面的代码,我无法将对象返回到工厂中的返回值,并且随后在html中有空白字段,并且有角度错误

提供程序“theService”必须从$get factory方法返回一个值

我正在使用TingoDB(Mongo的javascript版本)和Angular开发一个单页应用程序,用于节点Webkit中的数据绑定

我可以从控制器中查询数据库,以显示、过滤网页的数据等,但希望将此代码更改为角度工厂,以便我可以跨多个控制器进行同步。 虽然我能够使用虚拟数据从工厂返回数据到控制器,但我无法从数据库返回“实时”数据

以下代码用作控制器:

app.controller('MyCtrl', ['$scope', function($scope) {
function getData(callback) {
    collection.find( {} ).toArray(function(err, docs) {
          $scope.$apply(function () {
            callback(docs);
          });
        });  
}

function info(b) {
    // console.log(b);
    $scope.items = b;
}

getData(info);

}]);
app.controller("MyCtrl", function($scope, theService) {
  $scope.users = theService.all();
});
将此更改为工厂不起作用:

    app.factory("theService", function($scope) {
    function getData(callback) {
        collection.find( {} )).toArray(function(err, docs) {
              $scope.$apply(function () {
                callback(docs);
              });
            });  
    }

    function info(b) {
        // console.log(b);
        $scope.users = b;

        return {
            all: $scope.users,
            first: $scope.users[0]
        }
    }   
    getData(info);  
});
控制员:

app.controller('MyCtrl', ['$scope', function($scope) {
function getData(callback) {
    collection.find( {} ).toArray(function(err, docs) {
          $scope.$apply(function () {
            callback(docs);
          });
        });  
}

function info(b) {
    // console.log(b);
    $scope.items = b;
}

getData(info);

}]);
app.controller("MyCtrl", function($scope, theService) {
  $scope.users = theService.all();
});

在这里,控制器不知道在哪里定义
集合
变量,但最好将值传递给工厂

app.controller('MyCtrl', ['$scope','getData', function ($scope, getData) {  
    $scope.items = [];

    getData(collection).then(function(items) { // pass "collection" to the factory
        $scope.items = items;
    });
}]);
最好将工厂用作
全局
函数(或类构造函数)


你需要比工厂必须返回的“不工作”更具描述性something@user3801428能不能请你创作一首普朗克或小提琴,有很多未知变量使代码看起来很混乱。代码从本地数据库中提取数据并在节点webkit中运行,因此我认为不可能使plunk或fiddle保持其完整性。