ui路由器解决方案是找不到错误提供程序

时间:2015-02-25 06:40:21

标签: angularjs angular-ui-router

我在这里有一个ui -router状态

 var AccountParentState = {
            url: "/Account",
            views: accountrootview,
            stickA: true,
        },
            AccountAddState = {
                url: "/add",
                views: addaccountview,
                controller: "account-controller",
                resolve: {
                    Name: function () {
                        return "Joydeep";
                    }
                }
            };

        $stateProvider
            .state('account', AccountParentState)
            .state("account.add", AccountAddState)

这是我的控制者:

angular.module('ngApp').controller('account-controller', ['$scope', '$state', "account", "plugin-factory", "Name", function ($scope
    , $state
    , account
    , plugins, Name) {

    console.log(Name);


}]);

当我尝试解析Name中的account-controller时。它抛出错误:

Unknown provider: NameProvider <- Name <- account-controller

我的问题是如何解决这种情况。或者使用resolve属性解析ui-router状态中的数据。

1 个答案:

答案 0 :(得分:1)

为了帮助您查看问题,我created working plunker确实对上述状态使用了类似的定义:

  var AccountParentState = {
    url: "/Account",
    views: { '' : 
       { template: 'Account state <hr/><div ui-view=""></div>',} },
    stickA: true, 
  },
    AccountAddState = {
      url: "/add",
      //views: addaccountview,
      templateUrl: 'tpl.html',
      controller: "account-controller",
      resolve: {
        Name: function() {
          return "Joydeep";
        }
      }
    };

  $stateProvider
    .state('account', AccountParentState)
    .state("account.add", AccountAddState)

工厂和控制人员:

  .factory('account', function(){return {}})
  .factory('plugin-factory', function(){return {}})
  .controller('account-controller', 
     ['$scope', '$state', "account", "plugin-factory", "Name"
     , function($scope, $state, account, plugins, Name) {    
       console.log(Name);
     }
  ])

这是有效的,因为控制器是由UI-Router实例化的,作为状态转换的一部分。

另一方面,如果我们将在index.html中扩展该示例(请参阅forked broken version)行(在def状态之外)

<div ng-controller="account-controller"></div>
<div ui-view=""></div>

问题将出现。为什么?因为现在控制器UI-Router管理。它不是由其基础结构注入的,未提供配置的值'Name'。这是“平角”风格..

检查工作解决方案here和损坏的here