在AngularJS服务中使用$ http

约翰·梅肯

我试图将我所有的AJAX从Angular控制器移到服务中。我的代码在控制器中工作正常,但无法获得相同的$ http请求在服务中运行。当我运行以下代码时,Data.tracker设置为“功能已启动”,然后永不更改。

app.service("Data", function($http) {

this.tracker = "not started";

this.loadHumanReadableNames = function() {
        this.tracker = "function started";
        $http.get('http://proteomics.ysu.edu/secretomes/animal/index.php/api/get_human_readable_names/').
        success(function(data, status, headers, config) {
            this.tracker = "ajax successful";
        }).
        error(function(data, status, headers, config) {
            this.tracker = "ajax failed";
        });
    };
});

app.controller('GlobalController', function($scope, Data) {

    $scope.Data = Data;

    $scope.initializeData = function () {
        //load human readable names
        Data.loadHumanReadableNames();
    }
});

有任何想法吗?


更新

MajoB的答案很棒。但是,对于模块化,我通常更喜欢在模型(服务)中而不是在控制器中处理数据处理。上面的代码的问题在于this成功和错误功能中不可用。以下将打印“ ajax成功”:

在服务中:

app.service("Data", function($http) {

this.tracker = "not started";
var self = this;

this.loadHumanReadableNames = function() {
        this.tracker = "function started";
        $http.get('http://proteomics.ysu.edu/secretomes/animal/index.php/api/get_human_readable_names/').
        success(function(data, status, headers, config) {
            self.tracker = "ajax successful";
        }).
        error(function(data, status, headers, config) {
            self.tracker = "ajax failed";
        });
    };
});
玛丽安·班

您可以通过服务退还承诺:

this.loadHumanReadableNames = function() {            
        return $http.get('http://proteomics.ysu.edu/secretomes/animal/index.php/api/get_human_readable_names/');            
    };
});

控制器

app.controller('GlobalController', function($scope, Data) {   


    $scope.initializeData = function () {
        //load human readable names
        Data.loadHumanReadableNames().success(function (data, status, headers, config) {

        });;
    }
});

或使用$ q创建自定义承诺

    this.loadHumanReadableNames = function() {     
       var deferred = $q.defer();
       $http.get('http://proteomics.ysu.edu/secretomes/animal/index.php/api/get_human_readable_names/').success(function (data, status, headers, config) {
            deferred.resolve({ data: data, tracker : 'ajax successful' })
       });            


       return deferred.promise;        
    };

控制器:

app.controller('GlobalController', function($scope, Data) {   


        $scope.initializeData = function () {
            //load human readable names
            Data.loadHumanReadableNames().then(function (data) {

            });;
        }
    });

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使用AngularJS的$ http服务通过GET请求发送数组

来自分类Dev

在asp.net Web服务中使用AngularJS $ http,是否可以设置请求标头?

来自分类Dev

Angularjs; 在服务中使用$ http返回引用而不是实际数据

来自分类Dev

在angularjs中使用服务

来自分类Dev

AngularJS将使用$ http + $ interval的变量传递给服务

来自分类Dev

在AngularJS中使用$ http服务时的可变范围

来自分类Dev

在$ http回调中使用AngularJS和Typescript使用'this'

来自分类Dev

在AngularJS服务中使用'this'

来自分类Dev

使用$ http服务的AngularJS跨域请求

来自分类Dev

Angular-在控制器函数中使用$ http服务

来自分类Dev

在服务/工厂中使用$ http.get返回集合

来自分类Dev

Angularjs; 在服务中使用$ http返回引用而不是实际数据

来自分类Dev

AngularJS:使用$ http.post时了解服务

来自分类Dev

使用AngularJS通过$ http发布到服务器

来自分类Dev

在服务中使用$ http时,视图未更新

来自分类Dev

在angularjs中使用服务

来自分类Dev

Angularjs,Directive使用首先发出http请求的服务

来自分类Dev

在AngularJS服务中使用$ http回调

来自分类Dev

使用$ http服务的AngularJS跨域请求

来自分类Dev

Angular-在控制器函数中使用$ http服务

来自分类Dev

在AngularJS中使用服务

来自分类Dev

在AngularJS中使用$ http服务发布多个数组

来自分类Dev

使用angularjs http服务发送表单数据

来自分类Dev

使用AngularJS $ http服务将Angularjs连接到Spring RESTFul服务

来自分类Dev

在http发布AngularJS异步中使用循环

来自分类Dev

AngularJS-无法使用工厂调用http服务

来自分类Dev

在AngularJS + WebAPI中使用$ http

来自分类Dev

AngularJs:多次调用 $http 服务

来自分类Dev

在 ANGULAR 中使用 HTTP 从服务获取数组列表

Related 相关文章

热门标签

归档