将参数从控制器传递到angularjs中的服务

时间:2014-04-15 12:44:11

标签: angularjs angularjs-directive angularjs-scope angular-ui

我遇到了将参数从控制器传递到服务模块

的问题

我不知道我在哪里传递了控制器模块中的参数以及如何获取服务模块中的值。这是我的代码,

控制器模块

 var user = $scope.username;
 var pass = $scope.password;

  *// how to pass the username and password here*
  checkStatus.query(function(response, headers) {

            alert(headers('X-Internal-Auth-Toketn'));

  });

服务模块

UIAppResource.factory('checkStatus', function($resource) {
    var auth = Base64.encode("abcd:abcd");  // *I need username and password here* 

    return $resource(baseURL + "status", {},
        {
            'query': {
                method: 'GET',
                headers: {
                    'Accept':'application/json',
                    'Content-Type':'application/json',
                    'Authorization': 'Basic '+ auth,
                    'Access-Control-Allow-Headers': 'Origin, X-Requested-With, Content-Type, Accept'
               },
                isArray: false
            }
        }
    )
});

我是angularjs的新手,请帮我解决这个问题

提前致谢

2 个答案:

答案 0 :(得分:2)

返回一个包含内部使用$resource的函数的对象,而不是返回$resource。例如:

控制器:

var user = $scope.username;
var pass = $scope.password;
checkStatus.customQuery(user, pass, function(response, headers) {
    alert(headers('X-Internal-Auth-Toketn'));
});

服务:

UIAppResource.factory('checkStatus', function($resource) {
    return {
        customQuery: function(user, pass, callback) {
            var auth = Base64.encode(user + ':' + pass); 
            var myRes = $resource(baseURL + "status", {}, {
                'query': {
                    method: 'GET',
                    headers: {
                       'Accept':'application/json',
                       'Content-Type':'application/json',
                       'Authorization': 'Basic '+ auth,
                       'Access-Control-Allow-Headers': 'Origin, X-Requested-With, Content-Type, Accept'
                    },
                    isArray: false
                }
            });

            myRes.query(callback);
        }
    };
});

显然,这将为每个customQuery()调用创建一个新的$资源,因此最好将创建的$资源存储在服务中一次。为此,我将创建一个初始化函数,用户名/密码可以传递给它。

答案 1 :(得分:0)

您应该重新构建工厂定义,以便更容易传递参数。 CheckStatus应该是从工厂返回的对象的方法。定义应该类似于

UIAppResource.factory('authService', function($resource) {

var service={};
service.checkStatus=function(userName,passWord) {
   var auth = Base64.encode("abcd:abcd");  // *I need username and password here*         

   return $resource(baseURL + "status", {},
   {
        'query': {
            method: 'GET',
            headers: {
                'Accept':'application/json',
                'Content-Type':'application/json',
                'Authorization': 'Basic '+ auth,
                'Access-Control-Allow-Headers': 'Origin, X-Requested-With, Content-Type, Accept'
           },
            isArray: false
        }
    }
    )    
}
return service;

});

在你的控制器中,你打电话

authService.checkStatus($scope.userName,$scope.password);

相关问题