首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >angularjs未知错误:未知提供者:

angularjs未知错误:未知提供者:
EN

Stack Overflow用户
提问于 2013-08-16 14:52:44
回答 1查看 8.6K关注 0票数 5

我需要一些帮助。我正在学习Angularjs,并试图创建一个服务。目前,我正试图将模块中的所有内容分离开来。当我创建一个名为bac.路由管理器的新模块并尝试将它作为RouterService注入到应用配置中时,我会发现一个错误,我不理解它的含义,也不知道如何修复它。我的所有其他东西似乎都能工作,除了当我试图添加这个模块时,这个未知的提供者只有在我尝试注入它之后才会出现。如有任何帮助,请见谅。

我的错误

代码语言:javascript
复制
Uncaught Error: Unknown provider: RouterService from bac

我的app.js文件

代码语言:javascript
复制
angular.module('bac', [
   'bac.route-manager'
])

.config( function bacAppConfig( $routeProvider, RouterService ) {

     //I dont knwo if i can do this but right now it doesnt matter because of error
     console.log(RouterService.getRoutes());
});

我的路由-Manager.js文件

代码语言:javascript
复制
angular.module('bac.route-manager', [])

.service('RouterService', function() {

    this.getRoutes = function() {
        return {
                "/login": {
            templateUrl: 'app/modules/login-manager/partials/login.tpl.html',
             requiredLogin: false
         },

        "/dashboard": {
            templateUrl: 'app/modules/dashboard-manager/partials/dashboard.tpl.html',
            controller: 'DashboardController',
            requiredLogin: true
         }

        };

};

});

我使用grunt来生成html文件中包含的js,但是下面是为了简洁而删除大量内容的样子。

我的index.html

代码语言:javascript
复制
<html lang="en" class="no-js" ng-app="bac">
    <body>
        <ng-view></ng-view>

     <script type="text/javascript" src="vendor/angular/angular.js"></script>
     <script type="text/javascript" src="app/app.js"></script>
     <script type="text/javascript" src="app/modules/dashboard-manager/dashboard-manager.js"></script>
     <script type="text/javascript" src="app/modules/route-manager/route-manager.js"></script>

    </body>
</html>
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-08-16 14:57:36

config阶段,声明的服务还不可用。只有使用provide声明的人才会通过serviceNameProvider (在您定义的名称之后添加Provider )。例如:

代码语言:javascript
复制
.provide('RouterService', function() {
  var service = { };
  var routes = {
    "/login": {
      templateUrl: 'app/modules/login-manager/partials/login.tpl.html',
      requiredLogin: false
    }, 
    "/dashboard": {
        templateUrl: 'app/modules/dashboard-manager/partials/dashboard.tpl.html',
        controller: 'DashboardController',
        requiredLogin: true
     }};

  service.getRoutes = function() { return routes; };

  this.$get = function() { return service; }

  this.setupRoute = function(data) { /* something here */ };
};

当您获得提供程序时,在this上定义的所有方法都是可用的。当您访问正常服务时,注入的是$get函数的返回。根据需要,您需要更改服务以使用provide,或者要求在run方法中注入服务:

代码语言:javascript
复制
angular.module('bac', ['bac.route-manager'])
  .config(function ($routeProvider, RouterServiceProvider) {
    // Here, only RouterServiceProvider.setupRoute will be available
  }).run(function (RouterService) {
    // Here, the service singleton return with the $get function will
    // be injected
    console.log(RouterService.getRoutes());
});

编辑

作为附带说明,我认为即使您将RouterService定义为service,请求RouterServiceProvider仍然有效,但不会出现任何方法,因为service本质上是只返回$get中函数的包装器。

票数 17
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18276189

复制
相关文章

相似问题

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