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

Mah*_*alt 3 dependency-injection angularjs angularjs-scope chart.js

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

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)
Run Code Online (Sandbox Code Playgroud)

当我chart.js像下面那样全局注入时,我没有得到任何错误.(继续阅读)

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

})();
Run Code Online (Sandbox Code Playgroud)

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

angular
    .module('my-app')
    .controller('WhateverCtrl', ctrl);

ctrl.$inject = ['chart.js'];     // <<<<<

function ctrl() {
    var vm = this;

// ...
Run Code Online (Sandbox Code Playgroud)

但是,如果我$从注入行中删除ctrl.inject = ['chart.js'];我确实摆脱了错误,但chart.js不会工作,因为我想我必须将它传递给这样的函数function ctrl() {,这function ctrl(chart.js) {当然会导致错误..

小智 5

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