我应该把这个代码放在哪里?

时间:2014-02-03 15:45:31

标签: angularjs

我有一个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');
        });
    });

我是棱角分明的新手,这是最适合跑步的地方吗?我希望将它作为可以在不同项目中轻松重用的东西来运行。

2 个答案:

答案 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});
                        }
                };
        }
]);