在AngularJS中使用来自有状态服务的数据到控制器

时间:2017-05-14 05:58:32

标签: angularjs

我知道在angularJS中拥有有状态服务并不是最好的做法,但有时候当你想要一个服务方法返回多个值时它是有意义的。例如,在我的casei中,将需要在服务中执行一个load方法,该方法将触发多个异步REST调用以获取所有初始化数据,将其存储在服务中的多个实例变量中,然后任何控制器都可以在何时访问它需要。这将总结应用程序的整个初始化阶段。这是我的服务

    (function(){

    var dataService = function($http){

        this.landTransportTypes=[];
        var self = this;
        this.loadTransportTypes = function(mode){       
            return $http.get('/porteo-webapp/rest/init/transporttype/'+mode).success(function(response){
                this.landTransportTypes = response.data;
                console.log("In Service : "+self.landTransportTypes);               
            })
        };  

        return {    
            landTransportTypes:self.landTransportTypes,
            loadTransportTypes:this.loadTransportTypes
        };

    };

    angular.module('myApp').service('dataService',dataService);

}());

以下是我希望如何在我的控制器中访问服务实例变量

dataService
    .loadTransportTypes('LAND')
    .then(function(){
        console.log(dataService.landTransportTypes)
    });

但我在控制器中没有任何东西。在控制器中获取有状态数据的方法是什么?

1 个答案:

答案 0 :(得分:0)

更改为:

(function(){

    var dataService = function($http){
        var self = this;
        this.loadTransportTypes = function(mode){       
            return $http.get('/porteo-webapp/rest/init/transporttype/'+mode).then(function(response){
                self.landTransportTypes = response.data;
                console.log("In Service : "+self.landTransportTypes);               
            })
        };
        this.landTransportTypes=loadTransportTypes('XXX');

        return {    
            landTransportTypes:self.landTransportTypes,
            loadTransportTypes:this.loadTransportTypes
        };

    };

    angular.module('myApp').service('dataService',dataService);

}());