angularjs - 带参数的构造函数注入

时间:2014-04-17 19:36:04

标签: angularjs angularjs-service

我正在尝试使用angular.factory配方实例化一个对象。工厂代码是这样的

monevAppServices.factory('MonEvChartService', ['element','chartConfig',function monEvChartFactory(element,chartConfig) {

    return MonEvChart;
}

其中element和chartconfig是MonEvChart所期望的参数,类似于

new MonEvChart(element,chartConfig);

然而,当我尝试在我的控制器中使用此服务时(注入它之后)

angular.module('monevApp.controllers', [])
  .controller('NewDashboard',
        ['$rootScope','$scope','subscribedMonitor','MonEvChartService','$log',
            function($rootScope,$scope,subscribedMonitor,MonEvChartService,$log) {

        ...

    $scope.monevchart  = new MonEvChartService($scope.element,$scope.chartConfig);    
...

它会抛出类似

的错误
Error: [$injector:unpr] Unknown provider: elementProvider - element  - MonEvChartService
http://errors.angularjs.org/1.2.15/$injector/unpr?p0=elementProvider%20%3C-%20element%20%3C-%20MonEvChartService
    at http://localhost:9000/bower_components/angular/angular.js:78:12

非常感谢任何帮助指导。谢谢!

3 个答案:

答案 0 :(得分:3)

您没有实例化此类服务。 AngularJS为您创建这些对象,类似于Spring在Java中创建bean的方式。所以你不能像那样参数化它。如果你想创建类似的东西,你需要创建一个工厂方法,你可以执行以下操作:

http://plnkr.co/edit/xnGJxq

但是你要做的是为图表组件构建一个指令。服务不适合您,因为它不会对UI执行任何操作。所以你想了解指令以及如何构建指令:

http://docs.angularjs.org/guide/directive

答案 1 :(得分:1)

好的花了一些时间并重新阅读开发人员文档,这是我提出的工作解决方案。如果有人对此有意见,我真的很想听听

//removed the constructor arguments
monevAppServices.factory('MonEvChart', [function monEvChartFactory() {
        return MonEvChart;
}]);

...

//instantiating the object in the controller and passing in the arguments
monevchart   = new MonEvChart(element,config);
                monevchart.create();

答案 2 :(得分:0)

我想在angularJs中创建服务时我们无法添加参数的原因与依赖注入有关。大多数(如果不是全部)IoC容器都需要无参数构造函数。我认为对于angularJs注入器也是如此。