首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >错误:[$injector:unpr]未知提供程序: chart.jsProvider

错误:[$injector:unpr]未知提供程序: chart.jsProvider
EN

Stack Overflow用户
提问于 2016-02-22 22:44:12
回答 2查看 1.8K关注 0票数 3

我正在尝试使用这个插件https://github.com/jtblin/angular-chart.js。我得到了这个错误(我不认为问题出在插件上,而是出在我做注入的方式上!):

代码语言:javascript
运行
复制
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时,我没有得到任何错误。(继续阅读)

代码语言:javascript
运行
复制
angular.module('my-app', [
            'chart.js'      // <<<<<
            'ui.router',            
            'ngStorage',
            // ...
        ]);

})();

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

代码语言:javascript
运行
复制
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) {,这当然会因为.而导致错误。

EN

回答 2

Stack Overflow用户

发布于 2016-11-03 02:59:42

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

票数 5
EN

Stack Overflow用户

发布于 2018-02-12 09:18:20

通过JGOakley的说明,我能够在angular-chart.js中发现这一行

代码语言:javascript
运行
复制
return angular.module('chart.js', [])
    .provider('ChartJs', ChartJsProvider)

要将其包含在控制器中使用,请执行以下操作:

代码语言:javascript
运行
复制
YourModule.$inject = ['ChartJs'];

这是一个令人沮丧的发现,因为我采用这一行意味着我可以将其引用为chart

代码语言:javascript
运行
复制
define(['angular', 'chart'], factory);
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35556517

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档