在AngularJS中,Factory返回的是函数而不是函数的返回值

OGZ编码器

因此,我发现了一个几乎所有的应用程序,直到我意识到我正在让许多对数据库api的调用让步,结果该应用程序滞后了。我试图建立一种在$ scope对象中添加和删除项目时保持当前范围准确的方法,而不是每次都必须从数据库中请求整个列表。因此,从我读过的所有文章中我都知道,要走工厂是路要走。这样,我可以一次从数据库中提取数据,然后通过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());

返回未定义;

我实际上想在解析状态(ui-router)时执行所有这些操作,但是我想直接在控制器中也可以。

任何帮助将不胜感激,并随时要求我澄清任何事情。我不太擅长清楚地提出问题。

开发者033

正确的方法是从您的公司退回承诺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);
}]);

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章