如何使用字符串变量调用"Angular JS"服务方法

Fra*_*lin 1 angularjs angularjs-service

无论如何,使用字符串变量调用角度服务

$scope.serviceList=["yearDetails","monthDetails","dayDetails"];

//controller
$scope.getDetails=function(type,index){

    if(type==$scope.serviceList[index]){

    // if i will call like this yearDetails.query(function(data){}); it is working
    //here i am getting "yearDetails"
     $scope.serviceList[index].query(function(data){
            console.log(data);
     });
    }
}

//service
.factory('yearDetails', function($resource){
           return $resource('/getyearDetails', {}, {
               query: { method:'POST', params:{}, isArray:false }
   });
})
.factory('monthDetails', function($resource){
           return $resource('/getmonthDetails', {}, {
               query: { method:'POST', params:{}, isArray:false }
   });
})
.factory('dayDetails', function($resource){
           return $resource('/getdayDetails', {}, {
               query: { method:'POST', params:{}, isArray:false }
   });
})
Run Code Online (Sandbox Code Playgroud)

Mar*_*man 7

我想你可能会让事情变得复杂,让事情变得简单.

创建一个detailsService包含您需要的所有方法.

.factory('detailsService', function ($resource) {
        return {
            yearDetails: $resource('/getyearDetails', {}, {
                query: {
                    method: 'POST',
                    params: {},
                    isArray: false
                }
            }),
            monthDetails: $resource('/getmonthDetails', {}, {
                query: {
                    method: 'POST',
                    params: {},
                    isArray: false
                }
            }),
            dayDetails: $resource('/getdayDetails', {}, {
                query: {
                    method: 'POST',
                    params: {},
                    isArray: false
                }
            })
        });
Run Code Online (Sandbox Code Playgroud)

在您的控制器中,您可以访问该方法 key

$scope.getDetails=function(type,index){

    detailsService[type].query(function(data){
            console.log(data);
     });
}
Run Code Online (Sandbox Code Playgroud)


nXq*_*Xqd 6

直接回答你的问题,如何通过字符串获取angularJS服务.

// inject $injector to your controller
var yourService = $injector.get('YourServiceName');
Run Code Online (Sandbox Code Playgroud)

但是,不要像@Mark在他的回答中所说的那样复杂化:)