我正在使用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);
,然后当我点击菜单项时,视图最终意识到有数据可供使用。
新问题如何让视图在页面加载时获取此数据?
这应该是工厂吗?他们用的是什么?
答案 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();
如果您希望立即加载它,可以在控制器的开头调用它。