簡體   English   中英

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

[英]Factory is returning a function instead of the return value of the function in 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());

返回未定義;

我實際上想在解析狀態(ui路由器)中完成所有這些操作,但是我想直接在控制器中也可以。

任何幫助將不勝感激,並隨時要求我澄清任何事情。 我不太擅長清楚地提出問題。

正確的方法是從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);
}]);

廠:

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
  })
})

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM