我可以将控制器中的参数传递给AngularJS中的服务吗?

时间:2014-06-09 21:32:24

标签: angularjs service dependency-injection module controller

我们假设我有一些服务和一些控制器。该服务将返回什么取决于控制器将传递给它的内容。但确实可能吗?我怀疑服务可能如下所示:

var app = angular.module('tApp',[])
.provider('getFileContents', function(param){
    this.paramId = param;
    this.$get = function(){
        var par = this.paramId;
        return{
            getContents:function(){
                return "paramId comes here: "+par;
            }
        }
    }
});

然后我认为我的控制器应该是这样的:

app.controller('test_controlController',
    function test_controlController($scope,getFileContents){
        $scope.contents = getFileContents.getContents('test_control');
        console.dir($scope.contents);
});

......但它不起作用。它说:

Uncaught Error: Unknown provider: param from tApp 

那么它可以使它工作吗?

2 个答案:

答案 0 :(得分:2)

您正在向服务构造函数添加参数,而不是服务函数。并且您使用的是提供商而不是服务或工厂,您可以在此处获得有关服务/工厂和提供商之间差异的一些信息:

Angular Service VS Provider VS Factory

返回您的代码,进行以下更改:

<强>服务

app.service('FileService', function ()  {
    return {
        getFileContents : function (fileID) {
            //function logic goes here
            console.log(fileID);
        }
    }
});

<强>控制器:

app.controller('TestController', function ($scope,getFileContents) {
    $scope.contents = getFileContents.getFileContents(123);
});

答案 1 :(得分:1)

在服务中为getContents方法添加参数

return{
            getContents:function(foo){
                return "paramId comes here: "+ foo;
            }
        }