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

3
我正在尝试使用这个插件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)

当我像下面这样全局注入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) {,当然由于.的原因,这会导致错误。

1
检查演示,看起来要注入的提供程序称为ChartJsProvider在此处查看示例。还请注意,所有配置似乎都是在app.config中完成,而不是在控制器中完成。 - Rhumborl
2个回答

5

因为angular-chart.js本身是一个模块,所以必须注入到该模块中,而不能被注入到控制器中。


1
救了我一大堆麻烦,赞一个! - Naila Akbar
1
那么在控制器中如何访问这些函数呢? - mtro

1

有了JGOakley的解释,我能够在angular-chart.js中发现这行代码

return angular.module('chart.js', [])
    .provider('ChartJs', ChartJsProvider)

在控制器中使用此代码:

YourModule.$inject = ['ChartJs'];

这是一个令人沮丧的发现,因为我原本认为可以将其引用为chart
define(['angular', 'chart'], factory);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接