Factory返回一个函数而不是AngularJS中函数的返回值

时间:2016-08-02 06:05:01

标签: javascript angularjs

所以,我有一个应用程序几乎弄清楚,直到我意识到我正在让许多调用数据库api,因此应用程序滞后。我正在尝试设置一种方法,以便在$ scope对象中添加和删除项目时保持当前范围的准确性,而不必每次都从数据库请求整个列表。所以我从所有的内容中得知,工厂是要走的路。这样我就可以从数据库中提取一次数据,然后在通过api成功添加或删除条目后,我可以操作当前范围,而不是再次请求整个列表。我的问题是(有一个例子),如何从api中获取用户列表并将其添加到范围。然后,当我从列表中添加或删除用户时,我可以从范围中删除它们,而无需再次从api中获取列表?

这是我的工厂:

app.factory("UsersFactory",['Data',function(Data){
    var users;

    function init(){
        Data.get('users')
        .then(function (results) {
            users = results;
        });
    }

    init();

    function getUsers(){
        return users;
    }

    return {
        getUsers:getUsers
    }

}]);

在控制器中注入工厂后:

console.log(UsersFactory.getUsers);

返回函数但不返回函数的返回值。

我也尝试过:

console.log(UsersFactory.getUsers());

返回undefined;

我真的想在解决状态(ui-router)时完成所有这些操作,但在控制器中我也可以直接测试。

任何帮助都是ap;感谢并随时请我澄清任何事情。我不是很擅长明确提问。

2 个答案:

答案 0 :(得分:3)

执行此操作的正确方法是从factory

返回承诺
app.factory("UsersFactory", ['Data', function(Data) {
  var factory = {
    getUsers: getUsers
  };

  return factory;

  function getUsers() {
    return Data.get('users');
  }
}]);

然后,在controller

app.controller("UsersController", ['$scope', 'UsersFactory', function($scope, UsersFactory) {
  function getResponse(response) {
    $scope.users = response.data;
  }

  function getError(response) {
    console.log(response);
  }

  UsersFactory.getUsers()
    .then(getResponse);
    .catch(getError);
}]);

答案 1 :(得分:-1)

厂:

app.factory("UsersFactory",function(Data) {
UpDateUserinfo:function(){
       var inf;
       inf=Data.get('users');
       return inf;
    }
})

控制器:

 app.controller("UsersController", function($scope, UsersFactory){
 UsersFactory.UpDateUserinfo().$promise.then(function(data){
 $scope.users=data
  })
})