我正在开发一个Electron应用程序,利用Trello API,Node.js(和Node-Trello包)和Angular.js(github存储库)
在用户授权他们的Trello应用程序后,我保存了一些个人资料数据;其中一些是他们所有Trello板的ID列表。
我有一个控制器来处理显示他们的板列表。在这个控制器中,我从数据库中提取板 ID 列表并得到一个数组,例如
["893482938480", "0938492830"]
然后我调用一个函数,我将这个板 ID 数组传递给它,就像这样......
// 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);
问题是,如果我在函数之外console.log
$scope.board_names,那么我会得到undefined
.但是如果我登录函数,那么我会得到所需的数据。我有点被困在这里。任何帮助将不胜感激!
附言我也尝试在$scope.board_names上使用$watch
,但我仍然undefined
. 这就是我尝试过的...
$scope.$watch('$scope.board_names', function(newValue, oldValue) {
console.log('$scope.board_array: ' + newValue);
});
编辑 好吧,看起来这段代码确实有效;我$scope.board_array = $scope.get_board_data(boardIDs);
更改为仅$scope.get_board_data(boardIDs);
,然后当我单击菜单项时,视图最终意识到有数据可供其使用。
新问题如何使视图在页面加载时获取此数据?
这应该是一个工厂吗?这就是它们的用途吗?
我建议不要使用普通工厂,而是使用资源。 它们是专门为处理 REST 调用而专门创建的工厂。 查看下面的此链接以获取更多信息。
资源不仅是专门为此制作的,而且还允许您创建一个集中式系统,允许您根据需要轻松添加更多 REST 调用。
工厂:
(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();
来称呼它
如果您希望立即加载控制器,可以在控制器的开头调用它。