错误:[$ injector:unpr]未知提供者:chart.jsProvider

时间:2016-02-22 14:44:12

标签: angularjs dependency-injection angularjs-scope chart.js

我正在尝试使用此插件https://github.com/jtblin/angular-chart.js。 而且我收到了这个错误(我认为问题不在于插件而是在我正在进行注射的方式!!):

curl

当我像下面那样全局注入Error: [$injector:unpr] Unknown provider: chart.jsProvider <- chart.js <- WhateverCtrl http://errors.angularjs.org/1.3.20/$injector/unpr?p0=chart.jsProvider%20%3C-hart.js%20%3C-%20WhateverCtrl at http://mega.app/scripts/vendor.js:9895:12 at http://mega.app/scripts/vendor.js:13863:19 at Object.getService [as get] (http://mega.app/scripts/vendor.js:14010:39) at http://mega.app/scripts/vendor.js:13868:45 at getService (http://mega.app/scripts/vendor.js:14010:39) at invoke (http://mega.app/scripts/vendor.js:14042:13) at Object.instantiate (http://mega.app/scripts/vendor.js:14059:27) at http://mega.app/scripts/vendor.js:18356:28 at http://mega.app/scripts/vendor.js:44696:28 at invokeLinkFn (http://mega.app/scripts/vendor.js:18113:9) 时,我没有收到任何错误。 (继续阅读)

chart.js

但根据我的理解,建议只在使用它的控制器中注入此模块,因此当我尝试将其注入下面的控制器时,我得到上面的错误。

angular.module('my-app', [
            'chart.js'      // <<<<<
            'ui.router',            
            'ngStorage',
            // ...
        ]);

})();

但是,如果我从注入行删除angular .module('my-app') .controller('WhateverCtrl', ctrl); ctrl.$inject = ['chart.js']; // <<<<< function ctrl() { var vm = this; // ... $我确实摆脱了错误,但是ctrl.inject = ['chart.js'];不会工作,因为我想我必须把它传递给函数chart.js就像function ctrl() { function ctrl(chart.js) {.而导致错误。

2 个答案:

答案 0 :(得分:5)

由于angular-chart.js本身就是一个模块,因此必须将其注入模块并且不能注入控制器。

答案 1 :(得分:0)

通过JGOakley的澄清,我能够在angular-chart.js

中发现这一行
return angular.module('chart.js', [])
    .provider('ChartJs', ChartJsProvider)

要包含它以便在您的控制器中使用:

YourModule.$inject = ['ChartJs'];

这是一个令人沮丧的发现,因为我把这一行用来表示我可以将其引用为chart

define(['angular', 'chart'], factory);