UI路由器用于将服务注入子状态的未知提供程序解析

Yuj*_* Wu 6 angularjs angular-ui-router

将服务注入子状态解析功能时获得未知提供程序.但如果在父状态中定义了一个解决方案,它就可以正常工作.下面是一些示例代码:

我定义了一个服务模块

angular.module('services', [])
  .factory('myService', function() {
    // my service here
  })
Run Code Online (Sandbox Code Playgroud)

并初始化应用程序

var app = angular.module('app', ['services', 'ui.router']);
app.config(['$stateProvider', '$urlRouterProvider', function($stateProvider, 

    $urlRouterProvider) {
      $stateProvider.state('wizard', {
        url: '/wizard',
        abstract: true
      })
      .state('wizard.step1', {
        url: '/step1',
        templateUrl: ... ,
        resolve: {
          name: function(myService) {
            // do something with mySerice
          }
        },
        controller: function(name) {
          // controller codes here
        }
      })
    }]);
Run Code Online (Sandbox Code Playgroud)

我在wizard.step1解决方案中收到错误未知提供程序抱怨myService的错误.但是,如果我在父状态中添加随机解析,就像

$stateProvider.state('wizard', {
            url: '/wizard',
            abstract: true,
            resolve: {
              a: function() { return 1; }
            }
          })
Run Code Online (Sandbox Code Playgroud)

然后它可以正常工作.不知道这里发生了什么

Mat*_*tin 2

在你的控制器中,你必须注入你的服务 MyService,所以定义如下

  .state('wizard.step1', {
    url: '/step1',
    templateUrl: ... ,
    resolve: {
      name: ['myService', function(myService) {
        // do something with mySerice
      }]
    },
    controller: ['name', function(name) {
      // controller codes here
    }]
  })
Run Code Online (Sandbox Code Playgroud)