Angular.js API调用 - 我应该使用工厂吗?

时间:2016-07-08 16:01:09

标签: javascript angularjs node.js trello

我正在使用Trello API,Node.js(和Node-Trello软件包)和Angular.js(github repo

开发Electron应用程序

用户授权他们的Trello应用程序后,我保存了一些个人资料数据;其中一些是所有Trello板的ID列表。

我有一个控制器来处理显示他们的电路板列表。在这个控制器中,我从DB中拉出板ID列表,得到一个像

这样的数组
library(dplyr)
select_if(mtcars, function(x) inherits(x, 'Date'))

然后我调用一个函数,我传递这个板ID的数组,就像这样......

["893482938480", "0938492830"]

问题是,如果我在函数外部// get data for boards $scope.get_board_data = function(boardIDArray) { for(var i = 0; i < boardIDs.length; i++){ t.get("/1/boards/" + boardIDs[i], function(err, data) { if (err) throw err; board_info = data; board_names.push(board_info['name']); $scope.board_names = board_names; //console.log($scope.board_names); return $scope.board_names }); } } $scope.board_array = $scope.get_board_data(boardIDs); $ scope.board_names,那么我得到console.log。但如果我在函数内部登录,那么我会得到所需的数据。我有点卡在这里。任何帮助将不胜感激!

P.S。我也尝试在$ scope.board_names上使用undefined,但我仍然得到$watch。这就是我试过的......

undefined

编辑好吧,看来此代码确实有效;我将$scope.$watch('$scope.board_names', function(newValue, oldValue) { console.log('$scope.board_array: ' + newValue); });更改为$scope.board_array = $scope.get_board_data(boardIDs);,然后当我点击菜单项时,视图最终意识到有数据可供使用。

新问题如何让视图在页面加载时获取此数据?

这应该是工厂吗?他们用的是什么?

2 个答案:

答案 0 :(得分:1)

我建议您使用Resource而不是使用普通工厂。它们是专门为处理REST调用而专门创建的工厂。请查看下面的this link了解详情。

不仅专门为此设置了资源,而且还允许您创建一个集中式系统,使您可以根据需要轻松添加更多REST调用。

答案 1 :(得分:0)

工厂:

(function () {
'use strict';
  angular
  .module('app')
  .factory('YourFactoryName', ['$http', function ($http) {
      //Add your other things you need to inject I don't know what your using. 
      //Probably pass your t object, or if you can inject it here, if it is in fact a service of its own
      var factory = {};
      factory.get_board_data  = function (boardIDArray) {
        for(var i = 0; i < boardIDs.length; i++){
          t.get("/1/boards/" + boardIDs[i], function(err, data) {
            if (err) throw err;
            board_info = data;
            board_names.push(board_info['name']);

            return board_names;
        });
      };
  };
  return factory;
  }]);
}())

使用$scope.board_array=YourFactoryName.get_board_data();

进行调用

如果您希望立即加载它,可以在控制器的开头调用它。