我有一个http方法,可以从谷歌电子表格中获取一些数据。我想将其添加到$scope
,以便我可以在DOM中输出它。稍后我可能会对此进行定时循环,以便$ scope每隔5秒左右更新一次。
我目前在app.run中运行代码:
angular.module('spreadsheet2angular', []).
run(function($http){
$http({method: 'GET', url: 'http://cors.io/spreadsheets.google.com/feeds/cells/0Aq_23rNPzvODdFlBOFRYWlQwUFBtcXlGamhQeU9Canc/od6/public/values?alt=json'}).
success(function(data, status, headers, config) {
var entries = data.feed.entry;
var phraces = [];
entries.forEach(function(entry){
var cell = entry.gs$cell;
if(!phraces[cell.row]){
phraces[cell.row] = {};
}
if(cell.col == 1)
{
phraces[cell.row].name = cell.$t;
}
else if(cell.col == 2)
{
phraces[cell.row].value = cell.$t;
}
});
phraces.forEach(function(phrace){
console.log(phrace);
});
}).
error(function(data, status, headers, config) {
console.log('error');
});
});
我是棱角分明的新手,这是最适合跑步的地方吗?我希望将它作为可以在不同项目中轻松重用的东西来运行。
答案 0 :(得分:1)
我认为,根据你的解释,service将是完美的。构建它然后将其注入您的控制器。然后,您可以随时调用/使用该服务对象。
答案 1 :(得分:1)
我会使用返回promise的service / factory。所以我们调用异步服务方法,取回promise并将响应解析到控制器中。
如果您希望以后使用相同的调用,可以编写泛型方法。
以同样的方式,如果您将来以相同的方式解析响应,我将把这部分逻辑放入服务并用$q
换行。所以回应仍然是承诺。
这是我使用的一个例子,可以帮助你理解我的意思:
app.service('apiService', ['$http', '$q', '$rootScope',
function($http, $q, $rootScope) {
var request = function(method, data) {
var deferred = $q.defer();
var configHttp = {
method: 'POST',
url: config.api + '/' + method
};
if (data !== undefined) {
configHttp.data = data;
}
$http(configHttp).success(function(data, status, headers) {
if (data.error === undefined) {
deferred.resolve(data);
} else {
deferred.reject(data);
}
}).error(function(data, status, headers) {
deferred.reject(data);
});
return deferred.promise;
}
return {
getItem: function() {
return request('get_item');
},
getItemByParams: function(id) {
return request('get_item_by_params', {id: id});
}
};
}
]);