解决$ state抛出未知提供者

时间:2015-12-09 11:29:32

标签: angularjs

我使用 ui-router 来处理我的应用状态。我需要使用resolve来确保加载控制器时存在设置值。我开始制作一个非常简单的假人:

  .state('dashboard', {
    url: '/dashboard',
    resolve: {
      simpleObj: function(){
        return {value: 'simple!'};
      }
    },
    controller: 'DashboardController',
    template: '<dashboard></dashboard>',
  });

在控制器中我注入了这个,就像我任何其他依赖:

angular
.module('flowlens')
.controller('DashboardController', DashboardController);

DashboardController.$inject = ['simpleObj'];

function DashboardController(simpleObj){
  var vm = this;
  activate();

  function activate(){}
}

但是这会在unknown provider error上引发simpleObj此代码基于ui-router git repo上的示例代码,因此它应该可以工作。

根据其他人的说法,这通常发生在你的模板上使用ng-controller但我的模板不包含这样的东西:

%h2 Dashboard
%hr
%pre {{ $root.currentUser | json }}

.card.card-block
  %my-input{type: "contact", model: "selected_contact", placeholder:    "Choose Contact", allow-new: "true"}
  Selected:
  %pre {{ selected_contact | json }}
  %h2 Settings {{ $root.settings }}

应该没有必要使用延迟解决这个承诺,因为它只是返回一个简单的值 - 正确吗?

这里的问题是什么?

编辑继续plunkr详细说明正在发生的事情。

感谢imbalind的帮助。这是一个更新的plunkr工作。检查控制台以查看打印的值。

1 个答案:

答案 0 :(得分:2)

问题是您在两个不同的地方引用了DashboardController两次:

  1. $stateProvider内,您为simpleObj添加了解析。
  2. dashboard指令内部,它无法了解simpleObj是什么。
  3. 错误(恕我直言)具有用于不同事物的相同控制器。你应该有两个不同的控制器。

    如果您需要从这两方面访问simpleObj,您应该考虑使用它来提供服务。

    编辑Here's您的plunker已编辑,以避免错误。缺少逻辑。

相关问题